diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 9416c8b4d..3f4e1ef73 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -2491,7 +2491,7 @@ namespace dxvk { case D3D11_VK_EXT_MULTI_DRAW_INDIRECT_COUNT: return deviceFeatures.core.features.multiDrawIndirect - && deviceExtensions.khrDrawIndirectCount; + && deviceFeatures.vk12.drawIndirectCount; case D3D11_VK_EXT_DEPTH_BOUNDS: return deviceFeatures.core.features.depthBounds; diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 414a3a419..bdc4409bd 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -285,7 +285,7 @@ namespace dxvk { DxvkDeviceFeatures enabledFeatures) { DxvkDeviceExtensions devExtensions; - std::array devExtensionList = {{ + std::array devExtensionList = {{ &devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdShaderFragmentMask, &devExtensions.ext4444Formats, @@ -310,7 +310,6 @@ namespace dxvk { &devExtensions.khrBufferDeviceAddress, &devExtensions.khrCreateRenderPass2, &devExtensions.khrDepthStencilResolve, - &devExtensions.khrDrawIndirectCount, &devExtensions.khrDriverProperties, &devExtensions.khrDynamicRendering, &devExtensions.khrExternalMemoryWin32, @@ -351,6 +350,8 @@ namespace dxvk { DxvkNameList extensionNameList = extensionsEnabled.toNameList(); // Enable additional device features if supported + enabledFeatures.vk12.drawIndirectCount = m_deviceFeatures.vk12.drawIndirectCount; + enabledFeatures.extExtendedDynamicState.extendedDynamicState = VK_TRUE; enabledFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary = diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 0d81ec52a..70948295a 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -518,7 +518,7 @@ namespace dxvk { VkDeviceSize countOffset, uint32_t maxDrawCount, uint32_t stride) { - m_vkd->vkCmdDrawIndirectCountKHR(m_execBuffer, + m_vkd->vkCmdDrawIndirectCount(m_execBuffer, buffer, offset, countBuffer, countOffset, maxDrawCount, stride); } @@ -553,7 +553,7 @@ namespace dxvk { VkDeviceSize countOffset, uint32_t maxDrawCount, uint32_t stride) { - m_vkd->vkCmdDrawIndexedIndirectCountKHR(m_execBuffer, + m_vkd->vkCmdDrawIndexedIndirectCount(m_execBuffer, buffer, offset, countBuffer, countOffset, maxDrawCount, stride); } diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index b3b518194..c8a9e4d0c 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -300,7 +300,6 @@ namespace dxvk { DxvkExt khrBufferDeviceAddress = { VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, DxvkExtMode::Disabled }; DxvkExt khrCreateRenderPass2 = { VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrDepthStencilResolve = { VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, DxvkExtMode::Required }; - DxvkExt khrDrawIndirectCount = { VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrDriverProperties = { VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrDynamicRendering = { VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional }; diff --git a/src/vulkan/vulkan_loader.h b/src/vulkan/vulkan_loader.h index 28d4fd014..0802b2f51 100644 --- a/src/vulkan/vulkan_loader.h +++ b/src/vulkan/vulkan_loader.h @@ -260,7 +260,9 @@ namespace dxvk::vk { VULKAN_FN(vkCmdDraw); VULKAN_FN(vkCmdDrawIndexed); VULKAN_FN(vkCmdDrawIndirect); + VULKAN_FN(vkCmdDrawIndirectCount); VULKAN_FN(vkCmdDrawIndexedIndirect); + VULKAN_FN(vkCmdDrawIndexedIndirectCount); VULKAN_FN(vkCmdDispatch); VULKAN_FN(vkCmdDispatchIndirect); VULKAN_FN(vkCmdCopyBuffer); @@ -296,11 +298,6 @@ namespace dxvk::vk { VULKAN_FN(vkCmdEndRenderPass2KHR); #endif - #ifdef VK_KHR_draw_indirect_count - VULKAN_FN(vkCmdDrawIndirectCountKHR); - VULKAN_FN(vkCmdDrawIndexedIndirectCountKHR); - #endif - #ifdef VK_KHR_swapchain VULKAN_FN(vkCreateSwapchainKHR); VULKAN_FN(vkDestroySwapchainKHR);