diff options
| author | riperiperi <rhy3756547@hotmail.com> | 2020-11-02 19:53:23 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-02 16:53:23 -0300 |
| commit | e1da7df2075f45ac3d19538f7781115978282100 (patch) | |
| tree | d46ae3ffedd2886adba64f1044b699f99b13f795 /Ryujinx.Graphics.OpenGL | |
| parent | 11a7c99764ed4e6c575c877c69ca627645702a42 (diff) | |
Support res scale on images, correctly blacklist for SUST, move logic out of backend. (#1657)
* Support res scale on images, correctly blacklist for SUST, move logic
out of backend.
* Fix Typo
Diffstat (limited to 'Ryujinx.Graphics.OpenGL')
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/Pipeline.cs | 50 |
1 files changed, 7 insertions, 43 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs index 6277fe16..06cf5ef4 100644 --- a/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -32,12 +32,10 @@ namespace Ryujinx.Graphics.OpenGL private int _boundReadFramebuffer; private int[] _fpIsBgra = new int[8]; - private float[] _fpRenderScale = new float[33]; - private float[] _cpRenderScale = new float[32]; + private float[] _fpRenderScale = new float[65]; + private float[] _cpRenderScale = new float[64]; private TextureBase _unit0Texture; - private TextureBase _rtColor0Texture; - private TextureBase _rtDepthTexture; private FrontFaceDirection _frontFace; private ClipOrigin _clipOrigin; @@ -847,9 +845,6 @@ namespace Ryujinx.Graphics.OpenGL { EnsureFramebuffer(); - _rtColor0Texture = (TextureBase)colors[0]; - _rtDepthTexture = (TextureBase)depthStencil; - for (int index = 0; index < colors.Length; index++) { TextureView color = (TextureView)colors[index]; @@ -963,39 +958,6 @@ namespace Ryujinx.Graphics.OpenGL { ((TextureBase)texture).Bind(unit); } - - // Update scale factor for bound textures. - - switch (stage) - { - case ShaderStage.Fragment: - if (_program.FragmentRenderScaleUniform != -1) - { - // Only update and send sampled texture scales if the shader uses them. - bool interpolate = false; - float scale = texture.ScaleFactor; - - if (scale != 1) - { - TextureBase activeTarget = _rtColor0Texture ?? _rtDepthTexture; - - if (activeTarget != null && activeTarget.Width / (float)texture.Width == activeTarget.Height / (float)texture.Height) - { - // If the texture's size is a multiple of the sampler size, - // enable interpolation using gl_FragCoord. - // (helps "invent" new integer values between scaled pixels) - interpolate = true; - } - } - - _fpRenderScale[index + 1] = interpolate ? -scale : scale; - } - break; - - case ShaderStage.Compute: - _cpRenderScale[index] = texture.ScaleFactor; - break; - } } } @@ -1232,7 +1194,7 @@ namespace Ryujinx.Graphics.OpenGL } } - public void UpdateRenderScale(ShaderStage stage, int textureCount) + public void UpdateRenderScale(ShaderStage stage, float[] scales, int textureCount, int imageCount) { if (_program != null) { @@ -1241,14 +1203,16 @@ namespace Ryujinx.Graphics.OpenGL case ShaderStage.Fragment: if (_program.FragmentRenderScaleUniform != -1) { - GL.Uniform1(_program.FragmentRenderScaleUniform, textureCount + 1, _fpRenderScale); + Array.Copy(scales, 0, _fpRenderScale, 1, textureCount + imageCount); + GL.Uniform1(_program.FragmentRenderScaleUniform, 1 + textureCount + imageCount, _fpRenderScale); } break; case ShaderStage.Compute: if (_program.ComputeRenderScaleUniform != -1) { - GL.Uniform1(_program.ComputeRenderScaleUniform, textureCount, _cpRenderScale); + Array.Copy(scales, 0, _cpRenderScale, 0, textureCount + imageCount); + GL.Uniform1(_program.ComputeRenderScaleUniform, textureCount + imageCount, _cpRenderScale); } break; } |
