From 5a5f31b2f6ba13ae02fa0d6b13ce7a6c35376380 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Wed, 5 Oct 2022 23:06:42 -0400 Subject: [PATCH] Bump vulkan requirement to 1.3, use dynamic state to toggle depth test --- src/pc/gfx/gfx_vulkan.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pc/gfx/gfx_vulkan.cpp b/src/pc/gfx/gfx_vulkan.cpp index 9d4f930..f1e5c54 100644 --- a/src/pc/gfx/gfx_vulkan.cpp +++ b/src/pc/gfx/gfx_vulkan.cpp @@ -485,7 +485,10 @@ static std::tuple gfx_vulka color_blending.attachmentCount = 1; color_blending.pAttachments = &color_blend_attachment; - const std::array dynamic_states = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; + const std::array dynamic_states = { VK_DYNAMIC_STATE_VIEWPORT, + VK_DYNAMIC_STATE_SCISSOR, + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE }; VkPipelineDynamicStateCreateInfo dynamic_state = {}; dynamic_state.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; @@ -651,7 +654,7 @@ static void gfx_vulkan_create_instance() { VkApplicationInfo application_info = {}; application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; - application_info.apiVersion = VK_API_VERSION_1_1; + application_info.apiVersion = VK_API_VERSION_1_3; application_info.pApplicationName = "Super Mario 64"; application_info.pEngineName = "Super Mario 64 PC-Port"; @@ -762,15 +765,19 @@ static void gfx_vulkan_create_device() { } } + VkPhysicalDeviceExtendedDynamicStateFeaturesEXT enabled_features = {}; + enabled_features.extendedDynamicState = true; + std::array device_extensions = {"VK_KHR_swapchain"}; VkDeviceCreateInfo device_create_info = {}; device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + device_create_info.pNext = &enabled_features; device_create_info.pQueueCreateInfos = queue_create_infos.data(); device_create_info.queueCreateInfoCount = static_cast(queue_create_infos.size()); device_create_info.ppEnabledExtensionNames = device_extensions.data(); - device_create_info.enabledExtensionCount = device_extensions.size(); + device_create_info.enabledExtensionCount = device_extensions.size();\ vkCreateDevice(physical_device, &device_create_info, nullptr, &device); @@ -1432,9 +1439,11 @@ static void gfx_vulkan_renderer_set_sampler_parameters(int tile, bool linear_fil } static void gfx_vulkan_renderer_set_depth_test(bool depth_test) { + vkCmdSetDepthTestEnable(current_cmd, depth_test); } static void gfx_vulkan_renderer_set_depth_mask(bool z_upd) { + vkCmdSetDepthWriteEnable(current_cmd, z_upd); } static void gfx_vulkan_renderer_set_zmode_decal(bool zmode_decal) {