From 39dd25e972c28564571a82089a36bc7b84c79071 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 16 Jul 2022 14:47:54 +0200 Subject: [PATCH] [dxvk] Unconditionally call updateDynamicState And optimize that instead. The previous check would always succeed anyway since we'd set unused dynamic states to dirty, which is necessary for us to update that state once it's actually used by a pipeline. --- src/dxvk/dxvk_context.cpp | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 047cb80cd..e5a520fc6 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -5162,15 +5162,15 @@ namespace dxvk { void DxvkContext::updateDynamicState() { - if (m_flags.test(DxvkContextFlag::GpDirtyViewport)) { + if (unlikely(m_flags.test(DxvkContextFlag::GpDirtyViewport))) { m_flags.clr(DxvkContextFlag::GpDirtyViewport); m_cmd->cmdSetViewport(m_state.vp.viewportCount, m_state.vp.viewports.data()); m_cmd->cmdSetScissor(m_state.vp.viewportCount, m_state.vp.scissorRects.data()); } - if (m_flags.all(DxvkContextFlag::GpDirtyDepthStencilState, - DxvkContextFlag::GpDynamicDepthStencilState)) { + if (unlikely(m_flags.all(DxvkContextFlag::GpDirtyDepthStencilState, + DxvkContextFlag::GpDynamicDepthStencilState))) { m_flags.clr(DxvkContextFlag::GpDirtyDepthStencilState); // Make sure to not enable writes to aspects that cannot be @@ -5202,6 +5202,12 @@ namespace dxvk { m_state.gp.state.rs.depthBiasEnable()); } + if (unlikely(m_flags.all(DxvkContextFlag::GpDirtyBlendConstants, + DxvkContextFlag::GpDynamicBlendConstants))) { + m_flags.clr(DxvkContextFlag::GpDirtyBlendConstants); + m_cmd->cmdSetBlendConstants(&m_state.dyn.blendConstants.r); + } + if (m_flags.all(DxvkContextFlag::GpDirtyRasterizerState, DxvkContextFlag::GpDynamicRasterizerState)) { m_flags.clr(DxvkContextFlag::GpDirtyRasterizerState); @@ -5211,12 +5217,6 @@ namespace dxvk { m_state.dyn.frontFace); } - if (m_flags.all(DxvkContextFlag::GpDirtyBlendConstants, - DxvkContextFlag::GpDynamicBlendConstants)) { - m_flags.clr(DxvkContextFlag::GpDirtyBlendConstants); - m_cmd->cmdSetBlendConstants(&m_state.dyn.blendConstants.r); - } - if (m_flags.all(DxvkContextFlag::GpDirtyStencilRef, DxvkContextFlag::GpDynamicStencilRef)) { m_flags.clr(DxvkContextFlag::GpDirtyStencilRef); @@ -5351,15 +5351,7 @@ namespace dxvk { if (m_state.gp.flags.test(DxvkGraphicsPipelineFlag::HasTransformFeedback)) this->updateTransformFeedbackState(); - if (m_flags.any( - DxvkContextFlag::GpDirtyViewport, - DxvkContextFlag::GpDirtyBlendConstants, - DxvkContextFlag::GpDirtyDepthBias, - DxvkContextFlag::GpDirtyDepthBounds, - DxvkContextFlag::GpDirtyDepthStencilState, - DxvkContextFlag::GpDirtyRasterizerState, - DxvkContextFlag::GpDirtyStencilRef)) - this->updateDynamicState(); + this->updateDynamicState(); if (m_flags.test(DxvkContextFlag::DirtyPushConstants)) this->updatePushConstants();