aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/State/GpuState.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2019-12-31 13:32:06 -0300
committerThog <thog@protonmail.com>2020-01-09 02:13:00 +0100
commitd1c0a64e6a60b5c6f288c5d152e4f35fb587d988 (patch)
tree50a9f4fe9764715e3c2ff2b44e038533017324d1 /Ryujinx.Graphics.Gpu/State/GpuState.cs
parent430faeb8ef9a5906af642a4a2be0eb6e878f812e (diff)
Add XML documentation to Ryujinx.Graphics.Gpu.State
Diffstat (limited to 'Ryujinx.Graphics.Gpu/State/GpuState.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/State/GpuState.cs91
1 files changed, 85 insertions, 6 deletions
diff --git a/Ryujinx.Graphics.Gpu/State/GpuState.cs b/Ryujinx.Graphics.Gpu/State/GpuState.cs
index 509f6715..8f851bca 100644
--- a/Ryujinx.Graphics.Gpu/State/GpuState.cs
+++ b/Ryujinx.Graphics.Gpu/State/GpuState.cs
@@ -3,6 +3,9 @@ using System.Runtime.InteropServices;
namespace Ryujinx.Graphics.Gpu.State
{
+ /// <summary>
+ /// GPU state.
+ /// </summary>
class GpuState
{
private const int RegistersCount = 0xe00;
@@ -11,6 +14,9 @@ namespace Ryujinx.Graphics.Gpu.State
private int[] _backingMemory;
+ /// <summary>
+ /// GPU register information.
+ /// </summary>
private struct Register
{
public MethodCallback Callback;
@@ -25,6 +31,9 @@ namespace Ryujinx.Graphics.Gpu.State
private Register[] _registers;
+ /// <summary>
+ /// Creates a new instance of the GPU state.
+ /// </summary>
public GpuState()
{
_backingMemory = new int[RegistersCount];
@@ -56,6 +65,10 @@ namespace Ryujinx.Graphics.Gpu.State
InitializeDefaultState();
}
+ /// <summary>
+ /// Calls a GPU method, using this state.
+ /// </summary>
+ /// <param name="meth">The GPU method to be called</param>
public void CallMethod(MethodParams meth)
{
Register register = _registers[meth.Method];
@@ -67,24 +80,31 @@ namespace Ryujinx.Graphics.Gpu.State
_backingMemory[meth.Method] = meth.Argument;
- MethodCallback callback = register.Callback;
-
- if (callback != null)
- {
- callback(this, meth.Argument);
- }
+ register.Callback?.Invoke(this, meth.Argument);
}
+ /// <summary>
+ /// Reads data from a GPU register at the given offset.
+ /// </summary>
+ /// <param name="offset">Offset to be read</param>
+ /// <returns>Data at the register</returns>
public int Read(int offset)
{
return _backingMemory[offset];
}
+ /// <summary>
+ /// Writes a offset value at the uniform buffer offset register.
+ /// </summary>
+ /// <param name="offset">The offset to be written</param>
public void SetUniformBufferOffset(int offset)
{
_backingMemory[(int)MethodOffset.UniformBufferState + 3] = offset;
}
+ /// <summary>
+ /// Initializes registers with the default state.
+ /// </summary>
private void InitializeDefaultState()
{
// Depth ranges.
@@ -107,6 +127,12 @@ namespace Ryujinx.Graphics.Gpu.State
}
}
+ /// <summary>
+ /// Registers a callback that is called every time a GPU method, or methods are called.
+ /// </summary>
+ /// <param name="offset">Offset of the method</param>
+ /// <param name="count">Word count of the methods region</param>
+ /// <param name="callback">Calllback to be called</param>
public void RegisterCallback(MethodOffset offset, int count, MethodCallback callback)
{
for (int index = 0; index < count; index++)
@@ -115,11 +141,21 @@ namespace Ryujinx.Graphics.Gpu.State
}
}
+ /// <summary>
+ /// Registers a callback that is called every time a GPU method is called.
+ /// </summary>
+ /// <param name="offset">Offset of the method</param>
+ /// <param name="callback">Calllback to be called</param>
public void RegisterCallback(MethodOffset offset, MethodCallback callback)
{
_registers[(int)offset].Callback = callback;
}
+ /// <summary>
+ /// Checks if a given register has been modified since the last call to this method.
+ /// </summary>
+ /// <param name="offset">Register offset</param>
+ /// <returns>True if modified, false otherwise</returns>
public bool QueryModified(MethodOffset offset)
{
bool modified = _registers[(int)offset].Modified;
@@ -129,6 +165,12 @@ namespace Ryujinx.Graphics.Gpu.State
return modified;
}
+ /// <summary>
+ /// Checks if two registers have been modified since the last call to this method.
+ /// </summary>
+ /// <param name="m1">First register offset</param>
+ /// <param name="m2">Second register offset</param>
+ /// <returns>True if any register was modified, false otherwise</returns>
public bool QueryModified(MethodOffset m1, MethodOffset m2)
{
bool modified = _registers[(int)m1].Modified ||
@@ -140,6 +182,13 @@ namespace Ryujinx.Graphics.Gpu.State
return modified;
}
+ /// <summary>
+ /// Checks if two registers have been modified since the last call to this method.
+ /// </summary>
+ /// <param name="m1">First register offset</param>
+ /// <param name="m2">Second register offset</param>
+ /// <param name="m3">Third register offset</param>
+ /// <returns>True if any register was modified, false otherwise</returns>
public bool QueryModified(MethodOffset m1, MethodOffset m2, MethodOffset m3)
{
bool modified = _registers[(int)m1].Modified ||
@@ -153,6 +202,14 @@ namespace Ryujinx.Graphics.Gpu.State
return modified;
}
+ /// <summary>
+ /// Checks if two registers have been modified since the last call to this method.
+ /// </summary>
+ /// <param name="m1">First register offset</param>
+ /// <param name="m2">Second register offset</param>
+ /// <param name="m3">Third register offset</param>
+ /// <param name="m4">Fourth register offset</param>
+ /// <returns>True if any register was modified, false otherwise</returns>
public bool QueryModified(MethodOffset m1, MethodOffset m2, MethodOffset m3, MethodOffset m4)
{
bool modified = _registers[(int)m1].Modified ||
@@ -168,6 +225,15 @@ namespace Ryujinx.Graphics.Gpu.State
return modified;
}
+ /// <summary>
+ /// Checks if two registers have been modified since the last call to this method.
+ /// </summary>
+ /// <param name="m1">First register offset</param>
+ /// <param name="m2">Second register offset</param>
+ /// <param name="m3">Third register offset</param>
+ /// <param name="m4">Fourth register offset</param>
+ /// <param name="m5">Fifth register offset</param>
+ /// <returns>True if any register was modified, false otherwise</returns>
public bool QueryModified(
MethodOffset m1,
MethodOffset m2,
@@ -190,6 +256,13 @@ namespace Ryujinx.Graphics.Gpu.State
return modified;
}
+ /// <summary>
+ /// Gets indexed data from a given register offset.
+ /// </summary>
+ /// <typeparam name="T">Type of the data</typeparam>
+ /// <param name="offset">Register offset</param>
+ /// <param name="index">Index for indexed data</param>
+ /// <returns>The data at the specified location</returns>
public T Get<T>(MethodOffset offset, int index) where T : struct
{
Register register = _registers[(int)offset];
@@ -202,6 +275,12 @@ namespace Ryujinx.Graphics.Gpu.State
return Get<T>(offset + index * register.Stride);
}
+ /// <summary>
+ /// Gets data from a given register offset.
+ /// </summary>
+ /// <typeparam name="T">Type of the data</typeparam>
+ /// <param name="offset">Register offset</param>
+ /// <returns>The data at the specified location</returns>
public T Get<T>(MethodOffset offset) where T : struct
{
return MemoryMarshal.Cast<int, T>(_backingMemory.AsSpan().Slice((int)offset))[0];