MethodUniformBufferUpdate.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Ryujinx.Graphics.Gpu.State;
  2. using System;
  3. using System.Runtime.InteropServices;
  4. namespace Ryujinx.Graphics.Gpu.Engine
  5. {
  6. partial class Methods
  7. {
  8. /// <summary>
  9. /// Updates the uniform buffer data with inline data.
  10. /// </summary>
  11. /// <param name="state">Current GPU state</param>
  12. /// <param name="argument">New uniform buffer data word</param>
  13. private void UniformBufferUpdate(GpuState state, int argument)
  14. {
  15. var uniformBuffer = state.Get<UniformBufferState>(MethodOffset.UniformBufferState);
  16. _context.MemoryAccessor.Write(uniformBuffer.Address.Pack() + (uint)uniformBuffer.Offset, argument);
  17. state.SetUniformBufferOffset(uniformBuffer.Offset + 4);
  18. _context.AdvanceSequence();
  19. }
  20. /// <summary>
  21. /// Updates the uniform buffer data with inline data.
  22. /// </summary>
  23. /// <param name="state">Current GPU state</param>
  24. /// <param name="data">Data to be written to the uniform buffer</param>
  25. public void UniformBufferUpdate(GpuState state, ReadOnlySpan<int> data)
  26. {
  27. var uniformBuffer = state.Get<UniformBufferState>(MethodOffset.UniformBufferState);
  28. _context.MemoryAccessor.Write(uniformBuffer.Address.Pack() + (uint)uniformBuffer.Offset, MemoryMarshal.Cast<int, byte>(data));
  29. state.SetUniformBufferOffset(uniformBuffer.Offset + data.Length * 4);
  30. _context.AdvanceSequence();
  31. }
  32. }
  33. }