aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Nvdec/Vic/VideoImageComposer.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-07-12 00:07:01 -0300
committerGitHub <noreply@github.com>2020-07-12 05:07:01 +0200
commit4d02a2d2c0451b4de1f6de3bbce54c457cacebe2 (patch)
tree120fe4fb8cfa1ac1c6ef4c97d92be47e955e8c0f /Ryujinx.Graphics.Nvdec/Vic/VideoImageComposer.cs
parent38b26cf4242999fa7d8c550993ac0940cd03d55f (diff)
New NVDEC and VIC implementation (#1384)
* Initial NVDEC and VIC implementation * Update FFmpeg.AutoGen to 4.3.0 * Add nvdec dependencies for Windows * Unify some VP9 structures * Rename VP9 structure fields * Improvements to Video API * XML docs for Common.Memory * Remove now unused or redundant overloads from MemoryAccessor * NVDEC UV surface read/write scalar paths * Add FIXME comments about hacky things/stuff that will need to be fixed in the future * Cleaned up VP9 memory allocation * Remove some debug logs * Rename some VP9 structs * Remove unused struct * No need to compile Ryujinx.Graphics.Host1x with unsafe anymore * Name AsyncWorkQueue threads to make debugging easier * Make Vp9PictureInfo a ref struct * LayoutConverter no longer needs the depth argument (broken by rebase) * Pooling of VP9 buffers, plus fix a memory leak on VP9 * Really wish VS could rename projects properly... * Address feedback * Remove using * Catch OperationCanceledException * Add licensing informations * Add THIRDPARTY.md to release too Co-authored-by: Thog <me@thog.eu>
Diffstat (limited to 'Ryujinx.Graphics.Nvdec/Vic/VideoImageComposer.cs')
-rw-r--r--Ryujinx.Graphics.Nvdec/Vic/VideoImageComposer.cs94
1 files changed, 0 insertions, 94 deletions
diff --git a/Ryujinx.Graphics.Nvdec/Vic/VideoImageComposer.cs b/Ryujinx.Graphics.Nvdec/Vic/VideoImageComposer.cs
deleted file mode 100644
index 39e18fa6..00000000
--- a/Ryujinx.Graphics.Nvdec/Vic/VideoImageComposer.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using Ryujinx.Graphics.Gpu;
-using Ryujinx.Graphics.VDec;
-
-namespace Ryujinx.Graphics.Vic
-{
- class VideoImageComposer
- {
- private ulong _configStructAddress;
- private ulong _outputSurfaceLumaAddress;
- private ulong _outputSurfaceChromaUAddress;
- private ulong _outputSurfaceChromaVAddress;
-
- private VideoDecoder _vdec;
-
- public VideoImageComposer(VideoDecoder vdec)
- {
- _vdec = vdec;
- }
-
- public void Process(GpuContext gpu, int methodOffset, int[] arguments)
- {
- VideoImageComposerMeth method = (VideoImageComposerMeth)methodOffset;
-
- switch (method)
- {
- case VideoImageComposerMeth.Execute: Execute(gpu); break;
- case VideoImageComposerMeth.SetConfigStructOffset: SetConfigStructOffset(arguments); break;
- case VideoImageComposerMeth.SetOutputSurfaceLumaOffset: SetOutputSurfaceLumaOffset(arguments); break;
- case VideoImageComposerMeth.SetOutputSurfaceChromaUOffset: SetOutputSurfaceChromaUOffset(arguments); break;
- case VideoImageComposerMeth.SetOutputSurfaceChromaVOffset: SetOutputSurfaceChromaVOffset(arguments); break;
- }
- }
-
- private void Execute(GpuContext gpu)
- {
- StructUnpacker unpacker = new StructUnpacker(gpu.MemoryAccessor, _configStructAddress + 0x20);
-
- SurfacePixelFormat pixelFormat = (SurfacePixelFormat)unpacker.Read(7);
-
- int chromaLocHoriz = unpacker.Read(2);
- int chromaLocVert = unpacker.Read(2);
-
- int blockLinearKind = unpacker.Read(4);
- int blockLinearHeightLog2 = unpacker.Read(4);
-
- int reserved0 = unpacker.Read(3);
- int reserved1 = unpacker.Read(10);
-
- int surfaceWidthMinus1 = unpacker.Read(14);
- int surfaceHeightMinus1 = unpacker.Read(14);
-
- int gobBlockHeight = 1 << blockLinearHeightLog2;
-
- int surfaceWidth = surfaceWidthMinus1 + 1;
- int surfaceHeight = surfaceHeightMinus1 + 1;
-
- SurfaceOutputConfig outputConfig = new SurfaceOutputConfig(
- pixelFormat,
- surfaceWidth,
- surfaceHeight,
- gobBlockHeight,
- _outputSurfaceLumaAddress,
- _outputSurfaceChromaUAddress,
- _outputSurfaceChromaVAddress);
-
- _vdec.CopyPlanes(gpu, outputConfig);
- }
-
- private void SetConfigStructOffset(int[] arguments)
- {
- _configStructAddress = GetAddress(arguments);
- }
-
- private void SetOutputSurfaceLumaOffset(int[] arguments)
- {
- _outputSurfaceLumaAddress = GetAddress(arguments);
- }
-
- private void SetOutputSurfaceChromaUOffset(int[] arguments)
- {
- _outputSurfaceChromaUAddress = GetAddress(arguments);
- }
-
- private void SetOutputSurfaceChromaVOffset(int[] arguments)
- {
- _outputSurfaceChromaVAddress = GetAddress(arguments);
- }
-
- private static ulong GetAddress(int[] arguments)
- {
- return (ulong)(uint)arguments[0] << 8;
- }
- }
-} \ No newline at end of file