From 639de20a5b78c8c70f3d7dcc02e62b13f6e749f0 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Wed, 22 Jan 2025 23:43:09 +0100 Subject: Create Vulkan instance --- game/main.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) (limited to 'game') diff --git a/game/main.cpp b/game/main.cpp index 7bbbd71..13eacac 100644 --- a/game/main.cpp +++ b/game/main.cpp @@ -7,6 +7,8 @@ #include "hk21/vulkan_loader/api.hpp" +#define VK_ALLOCATOR nullptr + int SDL_main(int /* argc */, char* /* argv */[]) { SDL_Init(SDL_INIT_VIDEO); @@ -39,14 +41,56 @@ int SDL_main(int /* argc */, char* /* argv */[]) if (!status.ok()) { asl::eprint("Couldn't load global Vulkan functions: {}\n", status); + return 1; } uint32_t version{}; vkEnumerateInstanceVersion(&version); - asl::print("Vulkan version: {}.{}\n", - VK_API_VERSION_MAJOR(version), // NOLINT - VK_API_VERSION_MINOR(version)); // NOLINT + uint32_t vk_major = VK_API_VERSION_MAJOR(version); // NOLINT + uint32_t vk_minor = VK_API_VERSION_MINOR(version); // NOLINT + + if (vk_major != 1 || vk_minor < 3) + { + asl::eprint("Incompatible Vulkan version: {}.{}\n", vk_major, vk_minor); + return 1; + } + + VkApplicationInfo app_info{ + .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, + .pNext = nullptr, + .pApplicationName = "HK-21", + .applicationVersion = 0, + .pEngineName = "Custom", + .engineVersion = 0, + .apiVersion = VK_MAKE_API_VERSION(0, 1, 3, 0), // NOLINT + }; + + VkInstanceCreateInfo instance_create_info{ + .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .pApplicationInfo = &app_info, + .enabledLayerCount = static_cast(layers.size()), + .ppEnabledLayerNames = layers.data(), + .enabledExtensionCount = static_cast(instance_extensions.size()), + .ppEnabledExtensionNames = instance_extensions.data(), + }; + + VkInstance instance{}; + VkResult res = vkCreateInstance(&instance_create_info, VK_ALLOCATOR, &instance); + if (res != VK_SUCCESS) + { + asl::eprint("Couldn't create Vulkan instance: {}\n", res); + return 1; + } + + status = vulkan_loader::load_instance(vkGetInstanceProcAddr, instance); + if (!status.ok()) + { + asl::eprint("Couldn't load instance Vulkan functions: {}\n", status); + return 1; + } bool running = true; while (running) @@ -63,6 +107,7 @@ int SDL_main(int /* argc */, char* /* argv */[]) SDL_Delay(16); } + vkDestroyInstance(instance, VK_ALLOCATOR); SDL_DestroyWindow(window); SDL_Quit(); -- cgit