Przeglądaj źródła

Add detail of ZbcSetTableArguments (#810)

* Add detail of ZbcSetTableArguments

This is a missing part of the #800 PR that cause an assert to be
triggered in debug mode.

Also, remove Fence in SurfaceFlinger as it's a duplicate of NvFence.

* Fix critical issue in size checking of ioctl

oops
Thomas Guillemard 6 lat temu
rodzic
commit
88593bf872

+ 1 - 1
Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs

@@ -91,7 +91,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv
 
             if (isRead && isWrite)
             {
-                if (outputDataPosition < inputDataSize)
+                if (outputDataSize < inputDataSize)
                 {
                     arguments = null;
 

+ 41 - 2
Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/ZbcSetTableArguments.cs

@@ -1,10 +1,49 @@
-using System.Runtime.InteropServices;
+using System;
+using System.Runtime.InteropServices;
 
 namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu.Types
 {
+    [StructLayout(LayoutKind.Sequential)]
+    struct ZbcColorArray
+    {
+        private uint element0;
+        private uint element1;
+        private uint element2;
+        private uint element3;
+
+        public uint this[int index]
+        {
+            get
+            {
+                if (index == 0)
+                {
+                    return element0;
+                }
+                else if (index == 1)
+                {
+                    return element1;
+                }
+                else if (index == 2)
+                {
+                    return element2;
+                }
+                else if (index == 2)
+                {
+                    return element3;
+                }
+
+                throw new IndexOutOfRangeException();
+            }
+        }
+    }
+
     [StructLayout(LayoutKind.Sequential)]
     struct ZbcSetTableArguments
     {
-        // TODO
+        public ZbcColorArray ColorDs;
+        public ZbcColorArray ColorL2;
+        public uint          Depth;
+        public uint          Format;
+        public uint          Type;
     }
 }

+ 0 - 11
Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/Fence.cs

@@ -1,11 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
-{
-    [StructLayout(LayoutKind.Sequential, Size = 0x8)]
-    struct Fence
-    {
-        public int Id;
-        public int Value;
-    }
-}

+ 6 - 5
Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/MultiFence.cs

@@ -1,4 +1,5 @@
-using System.Runtime.InteropServices;
+using Ryujinx.HLE.HOS.Services.Nv.Types;
+using System.Runtime.InteropServices;
 
 namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
 {
@@ -9,15 +10,15 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
         public int FenceCount;
 
         [FieldOffset(0x4)]
-        public Fence Fence0;
+        public NvFence Fence0;
 
         [FieldOffset(0xC)]
-        public Fence Fence1;
+        public NvFence Fence1;
 
         [FieldOffset(0x14)]
-        public Fence Fence2;
+        public NvFence Fence2;
 
         [FieldOffset(0x1C)]
-        public Fence Fence3;
+        public NvFence Fence3;
     }
 }