Handle indirect draw counts with non-zero draw starts properly (#2593)

This commit is contained in:
gdkchan 2021-08-29 16:52:38 -03:00 committed by GitHub
parent 15e7fe3ac9
commit 82cefc8dd3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 81 additions and 14 deletions

View file

@ -63,10 +63,33 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// </summary>
/// <typeparam name="T">Type of the data</typeparam>
/// <param name="va">GPU virtual address where the data is located</param>
/// <param name="tracked">True if read tracking is triggered on the memory region</param>
/// <returns>The data at the specified memory location</returns>
public T Read<T>(ulong va) where T : unmanaged
public T Read<T>(ulong va, bool tracked = false) where T : unmanaged
{
return MemoryMarshal.Cast<byte, T>(GetSpan(va, Unsafe.SizeOf<T>()))[0];
int size = Unsafe.SizeOf<T>();
if (IsContiguous(va, size))
{
ulong address = Translate(va);
if (tracked)
{
return Physical.ReadTracked<T>(address);
}
else
{
return Physical.Read<T>(address);
}
}
else
{
Span<byte> data = new byte[size];
ReadImpl(va, data, tracked);
return MemoryMarshal.Cast<byte, T>(data)[0];
}
}
/// <summary>