aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vic/Image/InputSurface.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Vic/Image/InputSurface.cs')
-rw-r--r--src/Ryujinx.Graphics.Vic/Image/InputSurface.cs86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Vic/Image/InputSurface.cs b/src/Ryujinx.Graphics.Vic/Image/InputSurface.cs
new file mode 100644
index 00000000..15ac0460
--- /dev/null
+++ b/src/Ryujinx.Graphics.Vic/Image/InputSurface.cs
@@ -0,0 +1,86 @@
+using System;
+
+namespace Ryujinx.Graphics.Vic.Image
+{
+ ref struct RentedBuffer
+ {
+ public static RentedBuffer Empty => new RentedBuffer(Span<byte>.Empty, -1);
+
+ public Span<byte> Data;
+ public int Index;
+
+ public RentedBuffer(Span<byte> data, int index)
+ {
+ Data = data;
+ Index = index;
+ }
+
+ public void Return(BufferPool<byte> pool)
+ {
+ if (Index != -1)
+ {
+ pool.Return(Index);
+ }
+ }
+ }
+
+ ref struct InputSurface
+ {
+ public ReadOnlySpan<byte> Buffer0;
+ public ReadOnlySpan<byte> Buffer1;
+ public ReadOnlySpan<byte> Buffer2;
+
+ public int Buffer0Index;
+ public int Buffer1Index;
+ public int Buffer2Index;
+
+ public int Width;
+ public int Height;
+
+ public int UvWidth;
+ public int UvHeight;
+
+ public void Initialize()
+ {
+ Buffer0Index = -1;
+ Buffer1Index = -1;
+ Buffer2Index = -1;
+ }
+
+ public void SetBuffer0(RentedBuffer buffer)
+ {
+ Buffer0 = buffer.Data;
+ Buffer0Index = buffer.Index;
+ }
+
+ public void SetBuffer1(RentedBuffer buffer)
+ {
+ Buffer1 = buffer.Data;
+ Buffer1Index = buffer.Index;
+ }
+
+ public void SetBuffer2(RentedBuffer buffer)
+ {
+ Buffer2 = buffer.Data;
+ Buffer2Index = buffer.Index;
+ }
+
+ public void Return(BufferPool<byte> pool)
+ {
+ if (Buffer0Index != -1)
+ {
+ pool.Return(Buffer0Index);
+ }
+
+ if (Buffer1Index != -1)
+ {
+ pool.Return(Buffer1Index);
+ }
+
+ if (Buffer2Index != -1)
+ {
+ pool.Return(Buffer2Index);
+ }
+ }
+ }
+}