// VULKAN CONFIG static VkApplicationInfo app_info = { .sType = STYPE(APPLICATION_INFO), .pApplicationName = "Video Game", .applicationVersion = VK_MAKE_API_VERSION(0, 0, 0, 1), .pEngineName = "None (yet)", .engineVersion = VK_MAKE_API_VERSION(0, 0, 0, 1), .apiVersion = VK_API_VERSION_1_3, }; static const char *instance_layers[] = { "VK_LAYER_KHRONOS_validation" }; static const char *instance_extensions[] = { VK_KHR_SURFACE_EXTENSION_NAME, VK_KHR_XCB_SURFACE_EXTENSION_NAME, #ifdef BUILD_DEBUG VK_EXT_DEBUG_UTILS_EXTENSION_NAME, #endif }; static VkInstanceCreateInfo inst_info = { .sType = STYPE(INSTANCE_CREATE_INFO), .pApplicationInfo = &app_info, .enabledLayerCount = sizeof(instance_layers) / sizeof(char *), .ppEnabledLayerNames = instance_layers, .enabledExtensionCount = sizeof(instance_extensions) / sizeof(char *), .ppEnabledExtensionNames = instance_extensions, }; const char *device_extensions[] = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, }; #ifdef BUILD_DEBUG static VkDebugUtilsMessengerCreateInfoEXT debug_msg_info = { .sType = STYPE(DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT), .messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, .messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, .pfnUserCallback = DebugCallback, }; #endif static VkPhysicalDeviceVulkan13Features vk_13_features = { .sType = STYPE(PHYSICAL_DEVICE_VULKAN_1_3_FEATURES), .synchronization2 = VK_TRUE, .dynamicRendering = VK_TRUE }; static VkPhysicalDeviceVulkan12Features vk_12_features = { .sType = STYPE(PHYSICAL_DEVICE_VULKAN_1_2_FEATURES), .pNext = &vk_13_features, .descriptorIndexing = VK_TRUE, .bufferDeviceAddress = VK_TRUE }; static VkPhysicalDeviceVulkan11Features vk_11_features = { .sType = STYPE(PHYSICAL_DEVICE_VULKAN_1_1_FEATURES), .pNext = &vk_12_features }; static const VkPhysicalDeviceFeatures vk_features = { .shaderUniformBufferArrayDynamicIndexing = VK_TRUE, .shaderSampledImageArrayDynamicIndexing = VK_TRUE, .shaderStorageBufferArrayDynamicIndexing = VK_TRUE, .shaderStorageImageArrayDynamicIndexing = VK_TRUE }; static VkPhysicalDeviceFeatures2 vk_features_2 = { .sType = STYPE(PHYSICAL_DEVICE_FEATURES_2), .pNext = &vk_11_features, .features = vk_features }; static VkDeviceCreateInfo device_info = { .sType = STYPE(DEVICE_CREATE_INFO), .pNext = &vk_features_2, .ppEnabledExtensionNames = device_extensions, .enabledExtensionCount = Len(device_extensions), .pEnabledFeatures = NULL, }; static VmaAllocatorCreateInfo vma_create_info = { .flags = VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT, .vulkanApiVersion = VK_API_VERSION_1_3, }; static VkCommandPoolCreateInfo pool_create_info = { .sType = STYPE(COMMAND_POOL_CREATE_INFO), .flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, }; static VkFenceCreateInfo fence_create_info = { .sType = STYPE(FENCE_CREATE_INFO), .flags = VK_FENCE_CREATE_SIGNALED_BIT, }; static VkSemaphoreCreateInfo semaphore_create_info = { .sType = STYPE(SEMAPHORE_CREATE_INFO), }; static VkCommandBufferAllocateInfo cmd_buf_info = { .sType = STYPE(COMMAND_BUFFER_ALLOCATE_INFO), .commandBufferCount = 1, .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY, };