aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs17
1 files changed, 16 insertions, 1 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs b/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs
index cf74f649..9f6ee17c 100644
--- a/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs
@@ -64,7 +64,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
nameof(ThreedClassState.ShaderState)),
new StateUpdateCallbackEntry(UpdateRasterizerState, nameof(ThreedClassState.RasterizeEnable)),
- new StateUpdateCallbackEntry(UpdateScissorState, nameof(ThreedClassState.ScissorState)),
+
+ new StateUpdateCallbackEntry(UpdateScissorState,
+ nameof(ThreedClassState.ScissorState),
+ nameof(ThreedClassState.ScreenScissorState)),
new StateUpdateCallbackEntry(UpdateVertexBufferState,
nameof(ThreedClassState.VertexBufferDrawState),
@@ -426,6 +429,18 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
int width = scissor.X2 - x;
int height = scissor.Y2 - y;
+ if (_state.State.YControl.HasFlag(YControl.NegateY))
+ {
+ ref var screenScissor = ref _state.State.ScreenScissorState;
+ y = screenScissor.Height - height - y;
+
+ if (y < 0)
+ {
+ height += y;
+ y = 0;
+ }
+ }
+
float scale = _channel.TextureManager.RenderTargetScale;
if (scale != 1f)
{