Эх сурвалжийг харах

Fix output component register on pixel shaders (#1613)

* Fix output component register on pixel shaders

* Clean up usings

* Do not advance if no component is enabled for the target, this keeps the previous behavior
gdkchan 5 жил өмнө
parent
commit
d36c4bfba5

+ 6 - 6
Ryujinx.Graphics.Shader/Translation/EmitterContext.cs

@@ -1,4 +1,3 @@
-using Ryujinx.Common;
 using Ryujinx.Graphics.Shader.Decoders;
 using Ryujinx.Graphics.Shader.IntermediateRepresentation;
 using System.Collections.Generic;
@@ -85,7 +84,7 @@ namespace Ryujinx.Graphics.Shader.Translation
                     this.Copy(dest, src);
                 }
 
-                int regIndex = 0;
+                int regIndexBase = 0;
 
                 for (int rtIndex = 0; rtIndex < 8; rtIndex++)
                 {
@@ -100,7 +99,7 @@ namespace Ryujinx.Graphics.Shader.Translation
 
                         int fragmentOutputColorAttr = AttributeConsts.FragmentOutputColorBase + rtIndex * 16;
 
-                        Operand src = Register(regIndex, RegisterType.Gpr);
+                        Operand src = Register(regIndexBase + component, RegisterType.Gpr);
 
                         // Perform B <-> R swap if needed, for BGRA formats (not supported on OpenGL).
                         if (component == 0 || component == 2)
@@ -125,11 +124,12 @@ namespace Ryujinx.Graphics.Shader.Translation
                         {
                             this.Copy(Attribute(fragmentOutputColorAttr + component * 4), src);
                         }
-
-                        regIndex++;
                     }
 
-                    regIndex = BitUtils.AlignUp(regIndex, 4);
+                    if (target.Enabled)
+                    {
+                        regIndexBase += 4;
+                    }
                 }
             }
         }