[dxvk] Replace VK_EXT_extended_dynamic_state with core feature

This commit is contained in:
Philip Rebohle 2022-07-14 20:56:56 +02:00
parent 3cfc3e7714
commit 7677db3371
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
11 changed files with 49 additions and 78 deletions

View File

@ -258,8 +258,6 @@ namespace dxvk {
|| !required.extCustomBorderColor.customBorderColorWithoutFormat)
&& (m_deviceFeatures.extDepthClipEnable.depthClipEnable
|| !required.extDepthClipEnable.depthClipEnable)
&& (m_deviceFeatures.extExtendedDynamicState.extendedDynamicState
|| !required.extExtendedDynamicState.extendedDynamicState)
&& (m_deviceFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary
|| !required.extGraphicsPipelineLibrary.graphicsPipelineLibrary)
&& (m_deviceFeatures.extMemoryPriority.memoryPriority
@ -295,14 +293,13 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 24> devExtensionList = {{
std::array<DxvkExt*, 23> devExtensionList = {{
&devExtensions.amdMemoryOverallocationBehaviour,
&devExtensions.amdShaderFragmentMask,
&devExtensions.ext4444Formats,
&devExtensions.extConservativeRasterization,
&devExtensions.extCustomBorderColor,
&devExtensions.extDepthClipEnable,
&devExtensions.extExtendedDynamicState,
&devExtensions.extFullScreenExclusive,
&devExtensions.extGraphicsPipelineLibrary,
&devExtensions.extMemoryBudget,
@ -360,8 +357,6 @@ namespace dxvk {
enabledFeatures.vk13.dynamicRendering = VK_TRUE;
enabledFeatures.vk13.maintenance4 = VK_TRUE;
enabledFeatures.extExtendedDynamicState.extendedDynamicState = VK_TRUE;
enabledFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary =
m_deviceFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary;
@ -417,11 +412,6 @@ namespace dxvk {
enabledFeatures.extDepthClipEnable.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extDepthClipEnable);
}
if (devExtensions.extExtendedDynamicState) {
enabledFeatures.extExtendedDynamicState.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT;
enabledFeatures.extExtendedDynamicState.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extExtendedDynamicState);
}
if (devExtensions.extGraphicsPipelineLibrary) {
enabledFeatures.extGraphicsPipelineLibrary.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT;
enabledFeatures.extGraphicsPipelineLibrary.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extGraphicsPipelineLibrary);
@ -722,11 +712,6 @@ namespace dxvk {
m_deviceFeatures.extDepthClipEnable.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extDepthClipEnable);
}
if (m_deviceExtensions.supports(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME)) {
m_deviceFeatures.extExtendedDynamicState.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT;
m_deviceFeatures.extExtendedDynamicState.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extExtendedDynamicState);
}
if (m_deviceExtensions.supports(VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME)) {
m_deviceFeatures.extGraphicsPipelineLibrary.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT;
m_deviceFeatures.extGraphicsPipelineLibrary.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extGraphicsPipelineLibrary);
@ -863,8 +848,6 @@ namespace dxvk {
"\n customBorderColorWithoutFormat : ", features.extCustomBorderColor.customBorderColorWithoutFormat ? "1" : "0",
"\n", VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME,
"\n depthClipEnable : ", features.extDepthClipEnable.depthClipEnable ? "1" : "0",
"\n", VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME,
"\n extendedDynamicState : ", features.extExtendedDynamicState.extendedDynamicState ? "1" : "0",
"\n", VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME,
"\n graphicsPipelineLibrary : ", features.extGraphicsPipelineLibrary.graphicsPipelineLibrary ? "1" : "0",
"\n", VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME,

View File

@ -327,20 +327,10 @@ namespace dxvk {
uint32_t firstBinding,
uint32_t bindingCount,
const VkBuffer* pBuffers,
const VkDeviceSize* pOffsets) {
m_vkd->vkCmdBindVertexBuffers(m_execBuffer,
firstBinding, bindingCount, pBuffers, pOffsets);
}
void cmdBindVertexBuffers2(
uint32_t firstBinding,
uint32_t bindingCount,
const VkBuffer* pBuffers,
const VkDeviceSize* pOffsets,
const VkDeviceSize* pSizes,
const VkDeviceSize* pStrides) {
m_vkd->vkCmdBindVertexBuffers2EXT(m_execBuffer,
m_vkd->vkCmdBindVertexBuffers2(m_execBuffer,
firstBinding, bindingCount, pBuffers, pOffsets,
pSizes, pStrides);
}
@ -701,7 +691,7 @@ namespace dxvk {
void cmdSetDepthBoundsState(
VkBool32 depthBoundsTestEnable) {
m_vkd->vkCmdSetDepthBoundsTestEnableEXT(m_execBuffer, depthBoundsTestEnable);
m_vkd->vkCmdSetDepthBoundsTestEnable(m_execBuffer, depthBoundsTestEnable);
}
@ -709,11 +699,11 @@ namespace dxvk {
VkBool32 depthTestEnable,
VkBool32 depthWriteEnable,
VkCompareOp depthCompareOp) {
m_vkd->vkCmdSetDepthTestEnableEXT(m_execBuffer, depthTestEnable);
m_vkd->vkCmdSetDepthTestEnable(m_execBuffer, depthTestEnable);
if (depthTestEnable) {
m_vkd->vkCmdSetDepthWriteEnableEXT(m_execBuffer, depthWriteEnable);
m_vkd->vkCmdSetDepthCompareOpEXT(m_execBuffer, depthCompareOp);
m_vkd->vkCmdSetDepthWriteEnable(m_execBuffer, depthWriteEnable);
m_vkd->vkCmdSetDepthCompareOp(m_execBuffer, depthCompareOp);
}
}
@ -728,15 +718,15 @@ namespace dxvk {
void cmdSetRasterizerState(
VkCullModeFlags cullMode,
VkFrontFace frontFace) {
m_vkd->vkCmdSetCullModeEXT(m_execBuffer, cullMode);
m_vkd->vkCmdSetFrontFaceEXT(m_execBuffer, frontFace);
m_vkd->vkCmdSetCullMode(m_execBuffer, cullMode);
m_vkd->vkCmdSetFrontFace(m_execBuffer, frontFace);
}
void cmdSetScissor(
uint32_t scissorCount,
const VkRect2D* scissors) {
m_vkd->vkCmdSetScissorWithCountEXT(
m_vkd->vkCmdSetScissorWithCount(
m_execBuffer, scissorCount, scissors);
}
@ -745,11 +735,11 @@ namespace dxvk {
VkBool32 enableStencilTest,
const VkStencilOpState& front,
const VkStencilOpState& back) {
m_vkd->vkCmdSetStencilTestEnableEXT(
m_vkd->vkCmdSetStencilTestEnable(
m_execBuffer, enableStencilTest);
if (enableStencilTest) {
m_vkd->vkCmdSetStencilOpEXT(m_execBuffer,
m_vkd->vkCmdSetStencilOp(m_execBuffer,
VK_STENCIL_FACE_FRONT_BIT, front.failOp,
front.passOp, front.depthFailOp, front.compareOp);
m_vkd->vkCmdSetStencilCompareMask(m_execBuffer,
@ -757,7 +747,7 @@ namespace dxvk {
m_vkd->vkCmdSetStencilWriteMask(m_execBuffer,
VK_STENCIL_FACE_FRONT_BIT, front.writeMask);
m_vkd->vkCmdSetStencilOpEXT(m_execBuffer,
m_vkd->vkCmdSetStencilOp(m_execBuffer,
VK_STENCIL_FACE_BACK_BIT, back.failOp,
back.passOp, back.depthFailOp, back.compareOp);
m_vkd->vkCmdSetStencilCompareMask(m_execBuffer,
@ -779,7 +769,7 @@ namespace dxvk {
void cmdSetViewport(
uint32_t viewportCount,
const VkViewport* viewports) {
m_vkd->vkCmdSetViewportWithCountEXT(
m_vkd->vkCmdSetViewportWithCount(
m_execBuffer, viewportCount, viewports);
}

View File

@ -5073,7 +5073,7 @@ namespace dxvk {
// Vertex bindigs get remapped when compiling the
// pipeline, so this actually does the right thing
m_cmd->cmdBindVertexBuffers2(0, m_state.gp.state.il.bindingCount(),
m_cmd->cmdBindVertexBuffers(0, m_state.gp.state.il.bindingCount(),
buffers.data(), offsets.data(), lengths.data(), nullptr);
}

View File

@ -41,7 +41,6 @@ namespace dxvk {
VkPhysicalDevice4444FormatsFeaturesEXT ext4444Formats;
VkPhysicalDeviceCustomBorderColorFeaturesEXT extCustomBorderColor;
VkPhysicalDeviceDepthClipEnableFeaturesEXT extDepthClipEnable;
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extExtendedDynamicState;
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT extGraphicsPipelineLibrary;
VkPhysicalDeviceMemoryPriorityFeaturesEXT extMemoryPriority;
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT extNonSeamlessCubeMap;

View File

@ -282,7 +282,6 @@ namespace dxvk {
DxvkExt extConservativeRasterization = { VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extCustomBorderColor = { VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extDepthClipEnable = { VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extExtendedDynamicState = { VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, DxvkExtMode::Required };
DxvkExt extFullScreenExclusive = { VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extGraphicsPipelineLibrary = { VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extMemoryBudget = { VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, DxvkExtMode::Passive };

View File

@ -769,8 +769,8 @@ namespace dxvk {
std::array<VkDynamicState, 8> dynamicStates;
uint32_t dynamicStateCount = 0;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT;
if (state.useDynamicDepthBias())
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_BIAS;
@ -785,8 +785,8 @@ namespace dxvk {
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_REFERENCE;
if (!m_flags.test(DxvkGraphicsPipelineFlag::HasRasterizerDiscard)) {
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_CULL_MODE_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_FRONT_FACE_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_CULL_MODE;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_FRONT_FACE;
}
// Set up some specialization constants

View File

@ -307,8 +307,8 @@ namespace dxvk {
VK_SHADER_STAGE_FRAGMENT_BIT, psModule, "main" };
std::array<VkDynamicState, 2> dynStates = {{
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
}};
VkPipelineDynamicStateCreateInfo dynState = { VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO };

View File

@ -344,8 +344,8 @@ namespace dxvk {
VK_SHADER_STAGE_FRAGMENT_BIT, psModule, "main" };
std::array<VkDynamicState, 2> dynStates = {{
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
}};
VkPipelineDynamicStateCreateInfo dynState = { VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO };

View File

@ -257,8 +257,8 @@ namespace dxvk {
VK_SHADER_STAGE_FRAGMENT_BIT, psModule, "main", &specInfo };
std::array<VkDynamicState, 2> dynStates = {{
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
}};
VkPipelineDynamicStateCreateInfo dynState = { VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO };

View File

@ -548,11 +548,11 @@ namespace dxvk {
// Set up dynamic state. We do not know any pipeline state
// at this time, so make as much state dynamic as we can.
std::array<VkDynamicState, 5> dynamicStates = {{
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
VK_DYNAMIC_STATE_DEPTH_BIAS,
VK_DYNAMIC_STATE_CULL_MODE_EXT,
VK_DYNAMIC_STATE_FRONT_FACE_EXT,
VK_DYNAMIC_STATE_CULL_MODE,
VK_DYNAMIC_STATE_FRONT_FACE,
}};
VkPipelineDynamicStateCreateInfo dyInfo = { VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO };
@ -622,17 +622,17 @@ namespace dxvk {
uint32_t dynamicStateCount = 0;
std::array<VkDynamicState, 10> dynamicStates;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_REFERENCE;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_OP_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_OP;
if (m_device->features().core.features.depthBounds) {
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE;
dynamicStates[dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_BOUNDS;
}

View File

@ -257,6 +257,21 @@ namespace dxvk::vk {
VULKAN_FN(vkCmdSetStencilCompareMask);
VULKAN_FN(vkCmdSetStencilWriteMask);
VULKAN_FN(vkCmdSetStencilReference);
VULKAN_FN(vkCmdBindVertexBuffers2);
VULKAN_FN(vkCmdSetCullMode);
VULKAN_FN(vkCmdSetDepthBoundsTestEnable);
VULKAN_FN(vkCmdSetDepthCompareOp);
VULKAN_FN(vkCmdSetDepthTestEnable);
VULKAN_FN(vkCmdSetDepthWriteEnable);
VULKAN_FN(vkCmdSetFrontFace);
VULKAN_FN(vkCmdSetPrimitiveTopology);
VULKAN_FN(vkCmdSetScissorWithCount);
VULKAN_FN(vkCmdSetStencilOp);
VULKAN_FN(vkCmdSetStencilTestEnable);
VULKAN_FN(vkCmdSetViewportWithCount);
VULKAN_FN(vkCmdSetRasterizerDiscardEnable);
VULKAN_FN(vkCmdSetDepthBiasEnable);
VULKAN_FN(vkCmdSetPrimitiveRestartEnable);
VULKAN_FN(vkCmdBindDescriptorSets);
VULKAN_FN(vkCmdBindIndexBuffer);
VULKAN_FN(vkCmdBindVertexBuffers);
@ -312,21 +327,6 @@ namespace dxvk::vk {
VULKAN_FN(vkCmdEndConditionalRenderingEXT);
#endif
#ifdef VK_EXT_extended_dynamic_state
VULKAN_FN(vkCmdBindVertexBuffers2EXT);
VULKAN_FN(vkCmdSetCullModeEXT);
VULKAN_FN(vkCmdSetDepthBoundsTestEnableEXT);
VULKAN_FN(vkCmdSetDepthCompareOpEXT);
VULKAN_FN(vkCmdSetDepthTestEnableEXT);
VULKAN_FN(vkCmdSetDepthWriteEnableEXT);
VULKAN_FN(vkCmdSetFrontFaceEXT);
VULKAN_FN(vkCmdSetPrimitiveTopologyEXT);
VULKAN_FN(vkCmdSetScissorWithCountEXT);
VULKAN_FN(vkCmdSetStencilOpEXT);
VULKAN_FN(vkCmdSetStencilTestEnableEXT);
VULKAN_FN(vkCmdSetViewportWithCountEXT);
#endif
#ifdef VK_EXT_full_screen_exclusive
VULKAN_FN(vkAcquireFullScreenExclusiveModeEXT);
VULKAN_FN(vkReleaseFullScreenExclusiveModeEXT);