aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Pipeline.cs
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2022-05-12 14:47:13 +0100
committerGitHub <noreply@github.com>2022-05-12 10:47:13 -0300
commit43b4b34376cdea486906f8bb4058dda3be7e1bd8 (patch)
tree66e11982136335f0d7b180f9234b326ee5b3bf10 /Ryujinx.Graphics.OpenGL/Pipeline.cs
parent92ca1cb0cbab228e5ef22645cd4f9d06b1da4766 (diff)
Implement Viewport Transform Disable (#3328)1.1.120
* Initial implementation (no specialization) * Use specialization * Fix render scale, increase code gen version * Revert accidental change * Address Feedback
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Pipeline.cs')
-rw-r--r--Ryujinx.Graphics.OpenGL/Pipeline.cs15
1 files changed, 14 insertions, 1 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs
index 114fa685..0326f980 100644
--- a/Ryujinx.Graphics.OpenGL/Pipeline.cs
+++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs
@@ -1266,7 +1266,7 @@ namespace Ryujinx.Graphics.OpenGL
_vertexArray.SetVertexBuffers(vertexBuffers);
}
- public void SetViewports(int first, ReadOnlySpan<Viewport> viewports)
+ public void SetViewports(int first, ReadOnlySpan<Viewport> viewports, bool disableTransform)
{
Array.Resize(ref _viewportArray, viewports.Length * 4);
Array.Resize(ref _depthRangeArray, viewports.Length * 2);
@@ -1305,6 +1305,19 @@ namespace Ryujinx.Graphics.OpenGL
GL.ViewportArray(first, viewports.Length, viewportArray);
GL.DepthRangeArray(first, viewports.Length, depthRangeArray);
+
+ float disableTransformF = disableTransform ? 1.0f : 0.0f;
+ if (_supportBuffer.Data.ViewportInverse.W != disableTransformF || disableTransform)
+ {
+ float scale = _renderScale[0].X;
+ _supportBuffer.UpdateViewportInverse(new Vector4<float>
+ {
+ X = scale * 2f / viewports[first].Region.Width,
+ Y = scale * 2f / viewports[first].Region.Height,
+ Z = 1,
+ W = disableTransformF
+ });
+ }
}
public void TextureBarrier()