From efdcce44150934d80f4c5070d1b8d9553816a15b Mon Sep 17 00:00:00 2001 From: sunshineinabox Date: Wed, 29 May 2024 08:36:24 -0700 Subject: [PATCH] Only enable enable LogicOp dynamic state and logic op if its enabled. --- src/Ryujinx.Graphics.Vulkan/PipelineBase.cs | 18 +++++++++--------- src/Ryujinx.Graphics.Vulkan/PipelineState.cs | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs index 9e387fd5d..db4d922b6 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -1001,20 +1001,20 @@ namespace Ryujinx.Graphics.Vulkan public void SetLogicOpState(bool enable, LogicalOp op) { - if (Gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp) - { - DynamicState.SetLogicOp(op.Convert()); - } - else - { - _newState.LogicOp = op.Convert(); - } - // Vendors other than NVIDIA have a bug where it enables logical operations even for float formats, // so we need to force disable them here. bool logicOpEnable = enable && (Gd.Vendor == Vendor.Nvidia || _newState.Internal.LogicOpsAllowed); _newState.LogicOpEnable = logicOpEnable; + + if (Gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp && logicOpEnable) + { + DynamicState.SetLogicOp(op.Convert()); + } + else if (logicOpEnable) + { + _newState.LogicOp = op.Convert(); + } SignalStateChange(); } diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index c8ffece2d..ac95cfb24 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -595,7 +595,7 @@ namespace Ryujinx.Graphics.Vulkan if (supportsExtDynamicState2) { additionalDynamicStatesCount += 3; - if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp) + if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp && LogicOpEnable) { additionalDynamicStatesCount++; } @@ -649,7 +649,7 @@ namespace Ryujinx.Graphics.Vulkan dynamicStates[currentIndex++] = DynamicState.RasterizerDiscardEnableExt; dynamicStates[currentIndex++] = DynamicState.PrimitiveRestartEnableExt; - if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp) + if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp && LogicOpEnable) { dynamicStates[currentIndex++] = DynamicState.LogicOpExt; }