diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs
index e9143c19d5..deccd890f7 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs
@@ -278,25 +278,22 @@ namespace Ryujinx.Graphics.Gal.OpenGL
             {
                 forceUpdate = false;
 
-                if (New.ScissorTestEnabled[Index] != Old.ScissorTestEnabled[Index])
+                if (New.ScissorTestEnabled[Index])
                 {
-                    if (New.ScissorTestEnabled[Index])
+                    // If there is only 1 scissor test, geometry shaders are disabled so the scissor test applies to all viewports
+                    if (New.ScissorTestCount == 1)
                     {
-                        // If there is only 1 scissor test geometry shaders are disables so the scissor test applies to all viewports
-                        if (New.ScissorTestCount == 1)
-                        {
-                            GL.Enable(EnableCap.ScissorTest);
-                        }
-                        else
-                        {
-                            GL.Enable(IndexedEnableCap.ScissorTest, Index);
-                        }
-                        forceUpdate = true;
+                        GL.Enable(EnableCap.ScissorTest);
                     }
                     else
                     {
-                        GL.Disable(IndexedEnableCap.ScissorTest, Index);
+                        GL.Enable(IndexedEnableCap.ScissorTest, Index);
                     }
+                    forceUpdate = true;
+                }
+                else
+                {
+                    GL.Disable(IndexedEnableCap.ScissorTest, Index);
                 }
 
                 if (New.ScissorTestEnabled[Index] &&
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs
index ce5364e154..0d7bb3cd0a 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs
@@ -367,6 +367,9 @@ namespace Ryujinx.Graphics.Gal.OpenGL
 
             GL.Disable(EnableCap.FramebufferSrgb);
 
+            // Will be re-enabled if needed while binding, called before any game GL calls
+            GL.Disable(EnableCap.ScissorTest);
+
             GL.BlitFramebuffer(
                 SrcX0,
                 SrcY0,
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs b/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs
index 7de76cce8b..749f5fdcb5 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs
@@ -419,7 +419,7 @@ namespace Ryujinx.Graphics.Graphics3d
             // Once geometry shaders are fixed it should be equal to GalPipelineState.RenderTargetCount when shader loaded, otherwise equal to 1
             State.ScissorTestCount = 1;
 
-            for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+            for (int Index = 0; Index < State.ScissorTestCount; Index++)
             {
                 State.ScissorTestEnabled[Index] = ReadRegisterBool(NvGpuEngine3dReg.ScissorEnable + Index * 4);
 
@@ -438,6 +438,12 @@ namespace Ryujinx.Graphics.Graphics3d
                     if ((int)State.FlipY == -1)
                     {
                         State.ScissorTestY[Index] = ViewportHeight - State.ScissorTestY[Index] - State.ScissorTestHeight[Index];
+
+                        // Handle negative viewpont coordinate
+                        if (State.ScissorTestY[Index] < 0)
+                        {
+                            State.ScissorTestY[Index] = 0;
+                        }
                     }
                 }
             }