[dxvk] Replace VK_KHR_draw_indirect_count with core feature

And enable it optionally in the backend, since we provide the functionality.
This commit is contained in:
Philip Rebohle 2022-07-14 19:50:38 +02:00
parent eee4ac1e91
commit f07ba07ad8
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
5 changed files with 8 additions and 11 deletions

View File

@ -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;

View File

@ -285,7 +285,7 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 34> devExtensionList = {{
std::array<DxvkExt*, 33> 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 =

View File

@ -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);
}

View File

@ -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 };

View File

@ -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);