XML docs + nits

This commit is contained in:
gdk 2022-03-16 15:11:48 -03:00
parent 9ef58a7390
commit b8d0c9c4e0
3 changed files with 52 additions and 6 deletions

View file

@ -350,6 +350,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma
} }
} }
/// <summary>
/// Copies block linear data with block linear GOBs to a block linear destination with linear GOBs.
/// </summary>
/// <param name="memoryManager">GPU memory manager</param>
/// <param name="srcGpuVa">Source GPU virtual address</param>
/// <param name="dstGpuVa">Destination GPU virtual address</param>
/// <param name="size">Size in bytes of the copy</param>
private static void CopyGobBlockLinearToLinear(MemoryManager memoryManager, ulong srcGpuVa, ulong dstGpuVa, ulong size) private static void CopyGobBlockLinearToLinear(MemoryManager memoryManager, ulong srcGpuVa, ulong dstGpuVa, ulong size)
{ {
if (((srcGpuVa | dstGpuVa | size) & 0xf) == 0) if (((srcGpuVa | dstGpuVa | size) & 0xf) == 0)
@ -370,6 +377,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma
} }
} }
/// <summary>
/// Copies block linear data with linear GOBs to a block linear destination with block linear GOBs.
/// </summary>
/// <param name="memoryManager">GPU memory manager</param>
/// <param name="srcGpuVa">Source GPU virtual address</param>
/// <param name="dstGpuVa">Destination GPU virtual address</param>
/// <param name="size">Size in bytes of the copy</param>
private static void CopyGobLinearToBlockLinear(MemoryManager memoryManager, ulong srcGpuVa, ulong dstGpuVa, ulong size) private static void CopyGobLinearToBlockLinear(MemoryManager memoryManager, ulong srcGpuVa, ulong dstGpuVa, ulong size)
{ {
if (((srcGpuVa | dstGpuVa | size) & 0xf) == 0) if (((srcGpuVa | dstGpuVa | size) & 0xf) == 0)
@ -390,6 +404,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma
} }
} }
/// <summary>
/// Calculates the GOB block linear address from a linear address.
/// </summary>
/// <param name="address">Linear address</param>
/// <returns>Block linear address</returns>
private static ulong ConvertGobLinearToBlockLinearAddress(ulong address) private static ulong ConvertGobLinearToBlockLinearAddress(ulong address)
{ {
// y2 y1 y0 x5 x4 x3 x2 x1 x0 -> x5 y2 y1 x4 y0 x3 x2 x1 x0 // y2 y1 y0 x5 x4 x3 x2 x1 x0 -> x5 y2 y1 x4 y0 x3 x2 x1 x0

View file

@ -470,9 +470,15 @@ namespace Ryujinx.Graphics.Gpu.Memory
return PteUnmapped; return PteUnmapped;
} }
return UnpackVaFromPte(pte) + (va & PageMask); return UnpackPaFromPte(pte) + (va & PageMask);
} }
/// <summary>
/// Gets the kind of a given memory page.
/// This might indicate the type of resource that can be allocated on the page, and also texture tiling.
/// </summary>
/// <param name="va">GPU virtual address</param>
/// <returns>Kind of the memory page</returns>
public PteKind GetKind(ulong va) public PteKind GetKind(ulong va)
{ {
if (!ValidateAddress(va)) if (!ValidateAddress(va))
@ -531,19 +537,35 @@ namespace Ryujinx.Graphics.Gpu.Memory
_pageTable[l0][l1] = pte; _pageTable[l0][l1] = pte;
} }
private static ulong PackPte(ulong va, PteKind kind) /// <summary>
/// Creates a page table entry from a physical address and kind.
/// </summary>
/// <param name="pa">Physical address</param>
/// <param name="kind">Kind</param>
/// <returns>Page table entry</returns>
private static ulong PackPte(ulong pa, PteKind kind)
{ {
return va | ((ulong)kind << 48); return pa | ((ulong)kind << 56);
} }
/// <summary>
/// Unpacks kind from a page table entry.
/// </summary>
/// <param name="pte">Page table entry</param>
/// <returns>Kind</returns>
private static PteKind UnpackKindFromPte(ulong pte) private static PteKind UnpackKindFromPte(ulong pte)
{ {
return (PteKind)(pte >> 48); return (PteKind)(pte >> 56);
} }
private static ulong UnpackVaFromPte(ulong pte) /// <summary>
/// Unpacks physical address from a page table entry.
/// </summary>
/// <param name="pte">Page table entry</param>
/// <returns>Physical address</returns>
private static ulong UnpackPaFromPte(ulong pte)
{ {
return pte & 0xffffffffffffUL; return pte & 0xffffffffffffffUL;
} }
} }
} }

View file

@ -255,6 +255,11 @@ namespace Ryujinx.Graphics.Gpu.Memory
static class PteKindExtensions static class PteKindExtensions
{ {
/// <summary>
/// Checks if the kind is pitch.
/// </summary>
/// <param name="kind">Kind to check</param>
/// <returns>True if pitch, false otherwise</returns>
public static bool IsPitch(this PteKind kind) public static bool IsPitch(this PteKind kind)
{ {
return kind == PteKind.Pitch || kind == PteKind.PitchNoSwizzle; return kind == PteKind.Pitch || kind == PteKind.PitchNoSwizzle;