1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-14 22:29:15 +01:00

[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: case D3D11_VK_EXT_MULTI_DRAW_INDIRECT_COUNT:
return deviceFeatures.core.features.multiDrawIndirect return deviceFeatures.core.features.multiDrawIndirect
&& deviceExtensions.khrDrawIndirectCount; && deviceFeatures.vk12.drawIndirectCount;
case D3D11_VK_EXT_DEPTH_BOUNDS: case D3D11_VK_EXT_DEPTH_BOUNDS:
return deviceFeatures.core.features.depthBounds; return deviceFeatures.core.features.depthBounds;

View File

@ -285,7 +285,7 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) { DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions; DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 34> devExtensionList = {{ std::array<DxvkExt*, 33> devExtensionList = {{
&devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdMemoryOverallocationBehaviour,
&devExtensions.amdShaderFragmentMask, &devExtensions.amdShaderFragmentMask,
&devExtensions.ext4444Formats, &devExtensions.ext4444Formats,
@ -310,7 +310,6 @@ namespace dxvk {
&devExtensions.khrBufferDeviceAddress, &devExtensions.khrBufferDeviceAddress,
&devExtensions.khrCreateRenderPass2, &devExtensions.khrCreateRenderPass2,
&devExtensions.khrDepthStencilResolve, &devExtensions.khrDepthStencilResolve,
&devExtensions.khrDrawIndirectCount,
&devExtensions.khrDriverProperties, &devExtensions.khrDriverProperties,
&devExtensions.khrDynamicRendering, &devExtensions.khrDynamicRendering,
&devExtensions.khrExternalMemoryWin32, &devExtensions.khrExternalMemoryWin32,
@ -351,6 +350,8 @@ namespace dxvk {
DxvkNameList extensionNameList = extensionsEnabled.toNameList(); DxvkNameList extensionNameList = extensionsEnabled.toNameList();
// Enable additional device features if supported // Enable additional device features if supported
enabledFeatures.vk12.drawIndirectCount = m_deviceFeatures.vk12.drawIndirectCount;
enabledFeatures.extExtendedDynamicState.extendedDynamicState = VK_TRUE; enabledFeatures.extExtendedDynamicState.extendedDynamicState = VK_TRUE;
enabledFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary = enabledFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary =

View File

@ -518,7 +518,7 @@ namespace dxvk {
VkDeviceSize countOffset, VkDeviceSize countOffset,
uint32_t maxDrawCount, uint32_t maxDrawCount,
uint32_t stride) { uint32_t stride) {
m_vkd->vkCmdDrawIndirectCountKHR(m_execBuffer, m_vkd->vkCmdDrawIndirectCount(m_execBuffer,
buffer, offset, countBuffer, countOffset, maxDrawCount, stride); buffer, offset, countBuffer, countOffset, maxDrawCount, stride);
} }
@ -553,7 +553,7 @@ namespace dxvk {
VkDeviceSize countOffset, VkDeviceSize countOffset,
uint32_t maxDrawCount, uint32_t maxDrawCount,
uint32_t stride) { uint32_t stride) {
m_vkd->vkCmdDrawIndexedIndirectCountKHR(m_execBuffer, m_vkd->vkCmdDrawIndexedIndirectCount(m_execBuffer,
buffer, offset, countBuffer, countOffset, maxDrawCount, stride); 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 khrBufferDeviceAddress = { VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, DxvkExtMode::Disabled };
DxvkExt khrCreateRenderPass2 = { VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrCreateRenderPass2 = { VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, DxvkExtMode::Required };
DxvkExt khrDepthStencilResolve = { VK_KHR_DEPTH_STENCIL_RESOLVE_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 khrDriverProperties = { VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrDynamicRendering = { VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrDynamicRendering = { VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, DxvkExtMode::Required };
DxvkExt khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional }; 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(vkCmdDraw);
VULKAN_FN(vkCmdDrawIndexed); VULKAN_FN(vkCmdDrawIndexed);
VULKAN_FN(vkCmdDrawIndirect); VULKAN_FN(vkCmdDrawIndirect);
VULKAN_FN(vkCmdDrawIndirectCount);
VULKAN_FN(vkCmdDrawIndexedIndirect); VULKAN_FN(vkCmdDrawIndexedIndirect);
VULKAN_FN(vkCmdDrawIndexedIndirectCount);
VULKAN_FN(vkCmdDispatch); VULKAN_FN(vkCmdDispatch);
VULKAN_FN(vkCmdDispatchIndirect); VULKAN_FN(vkCmdDispatchIndirect);
VULKAN_FN(vkCmdCopyBuffer); VULKAN_FN(vkCmdCopyBuffer);
@ -296,11 +298,6 @@ namespace dxvk::vk {
VULKAN_FN(vkCmdEndRenderPass2KHR); VULKAN_FN(vkCmdEndRenderPass2KHR);
#endif #endif
#ifdef VK_KHR_draw_indirect_count
VULKAN_FN(vkCmdDrawIndirectCountKHR);
VULKAN_FN(vkCmdDrawIndexedIndirectCountKHR);
#endif
#ifdef VK_KHR_swapchain #ifdef VK_KHR_swapchain
VULKAN_FN(vkCreateSwapchainKHR); VULKAN_FN(vkCreateSwapchainKHR);
VULKAN_FN(vkDestroySwapchainKHR); VULKAN_FN(vkDestroySwapchainKHR);