diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2018-09-01 11:54:56 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-09-01 11:54:56 -0300 |
| commit | 35778afef953643a40c4455ef9261bca69c100f5 (patch) | |
| tree | d7f565c282e2c5460c6db7ec4e7473df42cda8e5 | |
| parent | 42e4e02a648812c4dee1574a5cd9e7dddf7b2458 (diff) | |
Improve handling on QueryGet on the gpu (#397)
| -rw-r--r-- | Ryujinx.HLE/Gpu/Engines/NvGpuEngine3d.cs | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/Ryujinx.HLE/Gpu/Engines/NvGpuEngine3d.cs b/Ryujinx.HLE/Gpu/Engines/NvGpuEngine3d.cs index 2010e43b..0d2f3bef 100644 --- a/Ryujinx.HLE/Gpu/Engines/NvGpuEngine3d.cs +++ b/Ryujinx.HLE/Gpu/Engines/NvGpuEngine3d.cs @@ -108,7 +108,7 @@ namespace Ryujinx.HLE.Gpu.Engines { SetFrameBuffer(Vmm, 0); } - + SetZeta(Vmm); SetRenderTargets(); @@ -228,7 +228,7 @@ namespace Ryujinx.HLE.Gpu.Engines } long Key = Vmm.GetPhysicalAddress(ZA); - + int Width = ReadRegister(NvGpuEngine3dReg.ZetaHoriz); int Height = ReadRegister(NvGpuEngine3dReg.ZetaVert); @@ -748,22 +748,43 @@ namespace Ryujinx.HLE.Gpu.Engines WriteRegister(NvGpuEngine3dReg.IndexBatchCount, 0); } + private enum QueryMode + { + WriteSeq, + Sync, + WriteCounterAndTimestamp + } + private void QueryControl(NvGpuVmm Vmm, NvGpuPBEntry PBEntry) { + WriteRegister(PBEntry); + long Position = MakeInt64From2xInt32(NvGpuEngine3dReg.QueryAddress); int Seq = Registers[(int)NvGpuEngine3dReg.QuerySequence]; int Ctrl = Registers[(int)NvGpuEngine3dReg.QueryControl]; - int Mode = Ctrl & 3; + QueryMode Mode = (QueryMode)(Ctrl & 3); - if (Mode == 0) + switch (Mode) { - //Write mode. - Vmm.WriteInt32(Position, Seq); - } + case QueryMode.WriteSeq: Vmm.WriteInt32(Position, Seq); break; - WriteRegister(PBEntry); + case QueryMode.WriteCounterAndTimestamp: + { + //TODO: Implement counters. + long Counter = 1; + + long Timestamp = (uint)Environment.TickCount; + + Timestamp = (long)(Timestamp * 615384.615385); + + Vmm.WriteInt64(Position + 0, Counter); + Vmm.WriteInt64(Position + 8, Timestamp); + + break; + } + } } private void CbData(NvGpuVmm Vmm, NvGpuPBEntry PBEntry) |
