From 15a99155ceba513c3148f29b556bef0840a261ae Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 15 Jun 2022 15:44:43 +0100 Subject: [PATCH] Fix checks for individual features in EXT dyn state 2 --- renderdoc/driver/vulkan/vk_core.h | 4 ++++ renderdoc/driver/vulkan/vk_state.cpp | 14 ++++++++++---- .../driver/vulkan/wrappers/vk_device_funcs.cpp | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 97dbf2af2..5800dc752 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -415,6 +415,8 @@ private: bool m_NULLDescriptorsAllowed = false; bool m_ExtendedDynState = false; bool m_ExtendedDynState2 = false; + bool m_ExtendedDynState2Logic = false; + bool m_ExtendedDynState2CPs = false; bool m_FragmentShadingRate = false; bool m_DynColorWrite = false; bool m_DynVertexInput = false; @@ -1164,6 +1166,8 @@ public: bool NULLDescriptorsAllowed() const { return m_NULLDescriptorsAllowed; } bool ExtendedDynamicState() const { return m_ExtendedDynState; } bool ExtendedDynamicState2() const { return m_ExtendedDynState2; } + bool ExtendedDynamicState2Logic() const { return m_ExtendedDynState2Logic; } + bool ExtendedDynamicState2CPs() const { return m_ExtendedDynState2CPs; } bool FragmentShadingRate() const { return m_FragmentShadingRate; } bool DynamicColorWrite() const { return m_DynColorWrite; } bool DynamicVertexInput() const { return m_DynVertexInput; } diff --git a/renderdoc/driver/vulkan/vk_state.cpp b/renderdoc/driver/vulkan/vk_state.cpp index 195915829..a4fc561cc 100644 --- a/renderdoc/driver/vulkan/vk_state.cpp +++ b/renderdoc/driver/vulkan/vk_state.cpp @@ -384,15 +384,21 @@ void VulkanRenderState::BindPipeline(WrappedVulkan *vk, VkCommandBuffer cmd, { if(dynamicStates[VkDynamicDepthBiasEnable]) ObjDisp(cmd)->CmdSetDepthBiasEnableEXT(Unwrap(cmd), depthBiasEnable); - if(dynamicStates[VkDynamicLogicOpEXT]) - ObjDisp(cmd)->CmdSetLogicOpEXT(Unwrap(cmd), logicOp); - if(dynamicStates[VkDynamicControlPointsEXT]) - ObjDisp(cmd)->CmdSetPatchControlPointsEXT(Unwrap(cmd), patchControlPoints); if(dynamicStates[VkDynamicPrimRestart]) ObjDisp(cmd)->CmdSetPrimitiveRestartEnableEXT(Unwrap(cmd), primRestartEnable); if(dynamicStates[VkDynamicRastDiscard]) ObjDisp(cmd)->CmdSetRasterizerDiscardEnableEXT(Unwrap(cmd), rastDiscardEnable); } + if(vk->ExtendedDynamicState2Logic()) + { + if(dynamicStates[VkDynamicLogicOpEXT]) + ObjDisp(cmd)->CmdSetLogicOpEXT(Unwrap(cmd), logicOp); + } + if(vk->ExtendedDynamicState2CPs()) + { + if(dynamicStates[VkDynamicControlPointsEXT]) + ObjDisp(cmd)->CmdSetPatchControlPointsEXT(Unwrap(cmd), patchControlPoints); + } if(dynamicStates[VkDynamicLineWidth]) ObjDisp(cmd)->CmdSetLineWidth(Unwrap(cmd), lineWidth); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 774cdadd7..d9d1482a0 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2893,6 +2893,8 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(extendedDynamicState2PatchControlPoints); m_ExtendedDynState2 = (ext->extendedDynamicState2 != VK_FALSE); + m_ExtendedDynState2Logic = (ext->extendedDynamicState2LogicOp != VK_FALSE); + m_ExtendedDynState2CPs = (ext->extendedDynamicState2PatchControlPoints != VK_FALSE); } END_PHYS_EXT_CHECK();