InputSurface.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. namespace Ryujinx.Graphics.Vic.Image
  3. {
  4. ref struct RentedBuffer
  5. {
  6. public static RentedBuffer Empty => new RentedBuffer(Span<byte>.Empty, -1);
  7. public Span<byte> Data;
  8. public int Index;
  9. public RentedBuffer(Span<byte> data, int index)
  10. {
  11. Data = data;
  12. Index = index;
  13. }
  14. public void Return(BufferPool<byte> pool)
  15. {
  16. if (Index != -1)
  17. {
  18. pool.Return(Index);
  19. }
  20. }
  21. }
  22. ref struct InputSurface
  23. {
  24. public ReadOnlySpan<byte> Buffer0;
  25. public ReadOnlySpan<byte> Buffer1;
  26. public ReadOnlySpan<byte> Buffer2;
  27. public int Buffer0Index;
  28. public int Buffer1Index;
  29. public int Buffer2Index;
  30. public int Width;
  31. public int Height;
  32. public int UvWidth;
  33. public int UvHeight;
  34. public void Initialize()
  35. {
  36. Buffer0Index = -1;
  37. Buffer1Index = -1;
  38. Buffer2Index = -1;
  39. }
  40. public void SetBuffer0(RentedBuffer buffer)
  41. {
  42. Buffer0 = buffer.Data;
  43. Buffer0Index = buffer.Index;
  44. }
  45. public void SetBuffer1(RentedBuffer buffer)
  46. {
  47. Buffer1 = buffer.Data;
  48. Buffer1Index = buffer.Index;
  49. }
  50. public void SetBuffer2(RentedBuffer buffer)
  51. {
  52. Buffer2 = buffer.Data;
  53. Buffer2Index = buffer.Index;
  54. }
  55. public void Return(BufferPool<byte> pool)
  56. {
  57. if (Buffer0Index != -1)
  58. {
  59. pool.Return(Buffer0Index);
  60. }
  61. if (Buffer1Index != -1)
  62. {
  63. pool.Return(Buffer1Index);
  64. }
  65. if (Buffer2Index != -1)
  66. {
  67. pool.Return(Buffer2Index);
  68. }
  69. }
  70. }
  71. }