aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-07-23 23:53:25 -0300
committerGitHub <noreply@github.com>2020-07-23 23:53:25 -0300
commit5a7df48975bcb04b1805031a26f5007211fe4c62 (patch)
tree7de88433b0427368d08b13d061c69ebeaf265624 /Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs
parent3c1f220c5ec6ea824e6a0c12d77fd8ce01ee0d1b (diff)
New GPFifo and fast guest constant buffer updates (#1400)
* Add new structures from official docs, start migrating GPFifo * Finish migration to new GPFifo processor * Implement fast constant buffer data upload * Migrate to new GPFifo class * XML docs
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs18
1 files changed, 18 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs b/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs
index 524f5e03..032a5868 100644
--- a/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferUpdate.cs
@@ -1,4 +1,6 @@
using Ryujinx.Graphics.Gpu.State;
+using System;
+using System.Runtime.InteropServices;
namespace Ryujinx.Graphics.Gpu.Engine
{
@@ -19,5 +21,21 @@ namespace Ryujinx.Graphics.Gpu.Engine
_context.AdvanceSequence();
}
+
+ /// <summary>
+ /// Updates the uniform buffer data with inline data.
+ /// </summary>
+ /// <param name="state">Current GPU state</param>
+ /// <param name="data">Data to be written to the uniform buffer</param>
+ public void UniformBufferUpdate(GpuState state, ReadOnlySpan<int> data)
+ {
+ var uniformBuffer = state.Get<UniformBufferState>(MethodOffset.UniformBufferState);
+
+ _context.MemoryAccessor.Write(uniformBuffer.Address.Pack() + (uint)uniformBuffer.Offset, MemoryMarshal.Cast<int, byte>(data));
+
+ state.SetUniformBufferOffset(uniformBuffer.Offset + data.Length * 4);
+
+ _context.AdvanceSequence();
+ }
}
} \ No newline at end of file