From 3bd357045f7581ee10d6c86ed8049bcebe35eda0 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Wed, 16 Feb 2022 19:15:39 -0300 Subject: Do not allow render targets not explicitly written by the fragment shader to be modified (#3063) * Do not allow render targets not explicitly written by the fragment shader to be modified * Shader cache version bump * Remove blank lines * Avoid redundant color mask updates * HostShaderCacheEntry can be null * Avoid more redundant glColorMask calls * nit: Mask -> Masks * Fix currentComponentMask * More efficient way to update _currentComponentMasks --- Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs') diff --git a/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs b/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs index 21f17041..996c2814 100644 --- a/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs +++ b/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs @@ -25,9 +25,9 @@ namespace Ryujinx.Graphics.Shader.Translation public ImapPixelType[] ImapTypes { get; } - public OmapTarget[] OmapTargets { get; } - public bool OmapSampleMask { get; } - public bool OmapDepth { get; } + public int OmapTargets { get; } + public bool OmapSampleMask { get; } + public bool OmapDepth { get; } public IGpuAccessor GpuAccessor { get; } @@ -135,21 +135,8 @@ namespace Ryujinx.Graphics.Shader.Translation public int GetDepthRegister() { - int count = 0; - - for (int index = 0; index < OmapTargets.Length; index++) - { - for (int component = 0; component < 4; component++) - { - if (OmapTargets[index].ComponentEnabled(component)) - { - count++; - } - } - } - // The depth register is always two registers after the last color output. - return count + 1; + return BitOperations.PopCount((uint)OmapTargets) + 1; } public TextureFormat GetTextureFormat(int handle, int cbufSlot = -1) -- cgit v1.2.3