BufferGetDataCommand.cs 1023 B

1234567891011121314151617181920212223242526272829
  1. using Ryujinx.Graphics.GAL.Multithreading.Model;
  2. using System;
  3. namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Buffer
  4. {
  5. struct BufferGetDataCommand : IGALCommand
  6. {
  7. public CommandType CommandType => CommandType.BufferGetData;
  8. private BufferHandle _buffer;
  9. private int _offset;
  10. private int _size;
  11. private TableRef<ResultBox<PinnedSpan<byte>>> _result;
  12. public void Set(BufferHandle buffer, int offset, int size, TableRef<ResultBox<PinnedSpan<byte>>> result)
  13. {
  14. _buffer = buffer;
  15. _offset = offset;
  16. _size = size;
  17. _result = result;
  18. }
  19. public static void Run(ref BufferGetDataCommand command, ThreadedRenderer threaded, IRenderer renderer)
  20. {
  21. ReadOnlySpan<byte> result = renderer.GetBufferData(threaded.Buffers.MapBuffer(command._buffer), command._offset, command._size);
  22. command._result.Get(threaded).Result = new PinnedSpan<byte>(result);
  23. }
  24. }
  25. }