diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs index a6a88a1e7..75a6674a3 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs @@ -168,7 +168,6 @@ namespace Ryujinx.Graphics.Vulkan pipeline.DepthMode = state.DepthMode == DepthMode.MinusOneToOne; pipeline.HasDepthStencil = state.DepthStencilEnable; - pipeline.LogicOpEnable = state.LogicOpEnable; pipeline.PolygonMode = PolygonMode.Fill; // Not implemented. @@ -176,16 +175,6 @@ namespace Ryujinx.Graphics.Vulkan pipeline.RasterizerDiscardEnable = extendedDynamicState2.ExtendedDynamicState2 ? false : state.RasterizerDiscard; pipeline.DepthBiasEnable = extendedDynamicState2.ExtendedDynamicState2 ? false : state.BiasEnable != 0; - - if (!extendedDynamicState2.ExtendedDynamicState2LogicOp) - { - pipeline.LogicOp = state.LogicOpEnable ? state.LogicOp.Convert() : default; - } - else - { - pipeline.LogicOp = 0; - } - pipeline.PatchControlPoints = extendedDynamicState2.ExtendedDynamicState2PatchControlPoints ? 0 : state.PatchControlPoints; pipeline.SamplesCount = (uint)state.SamplesCount; @@ -339,6 +328,20 @@ namespace Ryujinx.Graphics.Vulkan pipeline.Internal.AttachmentIntegerFormatMask = attachmentIntegerFormatMask; pipeline.Internal.LogicOpsAllowed = attachmentCount == 0 || !allFormatsFloatOrSrgb; + bool logicOpEnable = state.LogicOpEnable && + (gd.Vendor == Vendor.Nvidia || (attachmentCount == 0 || !allFormatsFloatOrSrgb)); + + pipeline.LogicOpEnable = logicOpEnable; + + if (!extendedDynamicState2.ExtendedDynamicState2LogicOp) + { + pipeline.LogicOp = logicOpEnable ? state.LogicOp.Convert() : default; + } + else + { + pipeline.LogicOp = 0; + } + return pipeline; } }