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
This commit is contained in:
Thomas Guillemard 2019-11-08 15:49:28 +01:00 committed by Ac_K
parent 5116951222
commit 88593bf872
4 changed files with 48 additions and 19 deletions

View File

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

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}