aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Guillemard <me@thog.eu>2019-11-08 15:49:28 +0100
committerAc_K <Acoustik666@gmail.com>2019-11-08 15:49:28 +0100
commit88593bf8727e0da05a8f319951dce19f27e287d6 (patch)
tree7e02569fee306f462596e26068695d63107122c5
parent5116951222fe8aa934ac8277a9ff34926e8ac73f (diff)
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
-rw-r--r--Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/ZbcSetTableArguments.cs43
-rw-r--r--Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/Fence.cs11
-rw-r--r--Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/MultiFence.cs11
4 files changed, 48 insertions, 19 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs b/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs
index 9e22d17e..2b9f09fa 100644
--- a/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs
+++ b/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;
diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/ZbcSetTableArguments.cs b/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/ZbcSetTableArguments.cs
index e21e437e..ed74cc26 100644
--- a/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/ZbcSetTableArguments.cs
+++ b/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;
}
}
diff --git a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/Fence.cs b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/Fence.cs
deleted file mode 100644
index 356a1232..00000000
--- a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/Fence.cs
+++ /dev/null
@@ -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;
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/MultiFence.cs b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/MultiFence.cs
index 97ad3e20..20e0723b 100644
--- a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Types/MultiFence.cs
+++ b/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;
}
} \ No newline at end of file