Jelajahi Sumber

Fix for integer vertex attributes and iset bf flag (#323)

gdkchan 7 tahun lalu
induk
melakukan
fa70629fab

+ 13 - 1
Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs

@@ -278,7 +278,19 @@ namespace Ryujinx.Graphics.Gal.OpenGL
                 int Size   = AttribElements[Attrib.Size];
                 int Offset = Attrib.Offset;
 
-                GL.VertexAttribPointer(Attrib.Index, Size, Type, Normalize, Stride, Offset);
+                if (Attrib.Type == GalVertexAttribType.Sint ||
+                    Attrib.Type == GalVertexAttribType.Uint)
+                {
+                    IntPtr Pointer = new IntPtr(Offset);
+
+                    VertexAttribIntegerType IType = (VertexAttribIntegerType)Type;
+
+                    GL.VertexAttribIPointer(Attrib.Index, Size, IType, Stride, Pointer);
+                }
+                else
+                {
+                    GL.VertexAttribPointer(Attrib.Index, Size, Type, Normalize, Stride, Offset);
+                }
             }
         }
 

+ 6 - 5
Ryujinx.Graphics/Gal/Shader/ShaderDecodeAlu.cs

@@ -871,11 +871,12 @@ namespace Ryujinx.Graphics.Gal.Shader
 
         private static void EmitSet(ShaderIrBlock Block, long OpCode, bool IsFloat, ShaderOper Oper)
         {
-            bool NegA      = ((OpCode >> 43) & 1) != 0;
-            bool AbsB      = ((OpCode >> 44) & 1) != 0;
-            bool BoolFloat = ((OpCode >> 52) & 1) != 0;
-            bool NegB      = ((OpCode >> 53) & 1) != 0;
-            bool AbsA      = ((OpCode >> 54) & 1) != 0;
+            bool NegA = ((OpCode >> 43) & 1) != 0;
+            bool AbsB = ((OpCode >> 44) & 1) != 0;
+            bool NegB = ((OpCode >> 53) & 1) != 0;
+            bool AbsA = ((OpCode >> 54) & 1) != 0;
+
+            bool BoolFloat = ((OpCode >> (IsFloat ? 52 : 44)) & 1) != 0;
 
             ShaderIrNode OperA = GetOperGpr8(OpCode), OperB;