|
@@ -64,7 +64,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
|
|
|
nameof(ThreedClassState.ShaderState)),
|
|
nameof(ThreedClassState.ShaderState)),
|
|
|
|
|
|
|
|
new StateUpdateCallbackEntry(UpdateRasterizerState, nameof(ThreedClassState.RasterizeEnable)),
|
|
new StateUpdateCallbackEntry(UpdateRasterizerState, nameof(ThreedClassState.RasterizeEnable)),
|
|
|
- new StateUpdateCallbackEntry(UpdateScissorState, nameof(ThreedClassState.ScissorState)),
|
|
|
|
|
|
|
+
|
|
|
|
|
+ new StateUpdateCallbackEntry(UpdateScissorState,
|
|
|
|
|
+ nameof(ThreedClassState.ScissorState),
|
|
|
|
|
+ nameof(ThreedClassState.ScreenScissorState)),
|
|
|
|
|
|
|
|
new StateUpdateCallbackEntry(UpdateVertexBufferState,
|
|
new StateUpdateCallbackEntry(UpdateVertexBufferState,
|
|
|
nameof(ThreedClassState.VertexBufferDrawState),
|
|
nameof(ThreedClassState.VertexBufferDrawState),
|
|
@@ -426,6 +429,18 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
|
|
|
int width = scissor.X2 - x;
|
|
int width = scissor.X2 - x;
|
|
|
int height = scissor.Y2 - y;
|
|
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;
|
|
float scale = _channel.TextureManager.RenderTargetScale;
|
|
|
if (scale != 1f)
|
|
if (scale != 1f)
|
|
|
{
|
|
{
|