Create Vulkan instance
This commit is contained in:
@ -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<uint32_t>(layers.size()),
|
||||
.ppEnabledLayerNames = layers.data(),
|
||||
.enabledExtensionCount = static_cast<uint32_t>(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();
|
||||
|
||||
|
Reference in New Issue
Block a user