TextureGetDataSliceCommand.cs 1.1 KB

123456789101112131415161718192021222324252627282930
  1. using Ryujinx.Graphics.GAL.Multithreading.Model;
  2. using Ryujinx.Graphics.GAL.Multithreading.Resources;
  3. using System;
  4. namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Texture
  5. {
  6. struct TextureGetDataSliceCommand : IGALCommand
  7. {
  8. public CommandType CommandType => CommandType.TextureGetDataSlice;
  9. private TableRef<ThreadedTexture> _texture;
  10. private TableRef<ResultBox<PinnedSpan<byte>>> _result;
  11. private int _layer;
  12. private int _level;
  13. public void Set(TableRef<ThreadedTexture> texture, TableRef<ResultBox<PinnedSpan<byte>>> result, int layer, int level)
  14. {
  15. _texture = texture;
  16. _result = result;
  17. _layer = layer;
  18. _level = level;
  19. }
  20. public static void Run(ref TextureGetDataSliceCommand command, ThreadedRenderer threaded, IRenderer renderer)
  21. {
  22. ReadOnlySpan<byte> result = command._texture.Get(threaded).Base.GetData(command._layer, command._level);
  23. command._result.Get(threaded).Result = new PinnedSpan<byte>(result);
  24. }
  25. }
  26. }