Improve handling on QueryGet on the gpu (#397)
This commit is contained in:
parent
42e4e02a64
commit
35778afef9
1 changed files with 29 additions and 8 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue