From 98c8fd5d39ee645922f071b6433308a813245500 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Wed, 24 Apr 2024 00:29:16 +0200 Subject: Add custom formatter & use it on Status --- main/main.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) (limited to 'main/main.cpp') diff --git a/main/main.cpp b/main/main.cpp index 9fb4755..00e7d71 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1,22 +1,73 @@ #include #include #include +#include #include using namespace deimos; +static LogApi* log_api; + +[[nodiscard]] +Status CreateInstance(VulkanApi* vk, VkInstance* instance) +{ + VkApplicationInfo application_info{ + .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, + .pNext = nullptr, + .pApplicationName = "Deimos game", + .applicationVersion = 0, + .pEngineName = "Deimos engine", + .engineVersion = 0, + .apiVersion = VK_API_VERSION_1_3, + }; + + const char* extensions[]{ + "VK_KHR_surface", + "VK_KHR_win32_surfaceu", + }; + + const char* layers[]{ + "VK_LAYER_KHRONOS_validation", + "VK_LAYER_LUNARG_monitor", + }; + + VkInstanceCreateInfo create_info{ + .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .pApplicationInfo = &application_info, + .enabledLayerCount = (uint32_t)ArraySize(layers), + .ppEnabledLayerNames = layers, + .enabledExtensionCount = (uint32_t)ArraySize(extensions), + .ppEnabledExtensionNames = extensions, + }; + + VkResult res = vk->CreateInstance(&create_info, nullptr, instance); + if (res != VK_SUCCESS) + { + return UnknownError(); + } + + return {}; +} + int main(int /* argc */, char* /* argv */[]) { auto* api_registry = InitializeGlobalApiRegistry(); - auto* log_api = api_registry->Get(); + log_api = api_registry->Get(); log_api->LogInfo("Base APIs registered"); RegisterVulkanLoaderApi(api_registry); auto* vulkan_loader_api = api_registry->Get(); - auto* vk = vulkan_loader_api->LoadEntry(); + auto* vk = vulkan_loader_api->LoadEntry(); + + VkInstance instance{}; + Status s = CreateInstance(vk, &instance); + if (!s.ok()) + { + log_api->LogError("Couldn't create Vulkan instance: $", s); + } - Ensures(vk->GetInstanceProcAddr != nullptr); - Ensures(vk->CreateInstance != nullptr); log_api->LogInfo("OK"); return 0; -- cgit