diff options
Diffstat (limited to 'main/main.cpp')
-rw-r--r-- | main/main.cpp | 59 |
1 files changed, 55 insertions, 4 deletions
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 <deimos/core/api_registry.h>
#include <deimos/core/log.h>
#include <deimos/core/temp_allocator.h>
+#include <deimos/core/status.h>
#include <deimos/vulkan/vulkan.h>
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<LogApi>();
+ log_api = api_registry->Get<LogApi>();
log_api->LogInfo("Base APIs registered"); RegisterVulkanLoaderApi(api_registry); auto* vulkan_loader_api = api_registry->Get<VulkanLoaderApi>(); - 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;
|