aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-12-03 00:38:47 -0200
committerGitHub <noreply@github.com>2018-12-03 00:38:47 -0200
commitc86aacde76b5f8e503e2b412385c8491ecc86b3b (patch)
tree8e4737422fba15199c1a6ce7c6345996c0e907b5 /Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
parentad00fd02442cf9c0f00c4562635738042b521efa (diff)
NVDEC implementation using FFmpeg (#443)
* Initial nvdec implementation using FFmpeg * Fix swapped channels on the video decoder and the G8R8 texture format * Fix texture samplers not being set properly (regression) * Rebased * Remove unused code introduced on the rebase * Add support for RGBA8 output format on the video image composer * Correct spacing * Some fixes for rebase and other tweaks * Allow size mismatch on frame copy * Get rid of GetHostAddress calls on VDec
Diffstat (limited to 'Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs')
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs42
1 files changed, 42 insertions, 0 deletions
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs b/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
new file mode 100644
index 00000000..6ac91d8b
--- /dev/null
+++ b/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
@@ -0,0 +1,42 @@
+using ChocolArm64.Memory;
+using Ryujinx.Graphics.Gal;
+using Ryujinx.Graphics.Memory;
+
+namespace Ryujinx.Graphics.Texture
+{
+ static class TextureHelper
+ {
+ public static ISwizzle GetSwizzle(GalImage Image)
+ {
+ int BlockWidth = ImageUtils.GetBlockWidth (Image.Format);
+ int BytesPerPixel = ImageUtils.GetBytesPerPixel(Image.Format);
+
+ int Width = (Image.Width + (BlockWidth - 1)) / BlockWidth;
+
+ if (Image.Layout == GalMemoryLayout.BlockLinear)
+ {
+ int AlignMask = Image.TileWidth * (64 / BytesPerPixel) - 1;
+
+ Width = (Width + AlignMask) & ~AlignMask;
+
+ return new BlockLinearSwizzle(Width, BytesPerPixel, Image.GobBlockHeight);
+ }
+ else
+ {
+ return new LinearSwizzle(Image.Pitch, BytesPerPixel);
+ }
+ }
+
+ public static (MemoryManager Memory, long Position) GetMemoryAndPosition(
+ IMemory Memory,
+ long Position)
+ {
+ if (Memory is NvGpuVmm Vmm)
+ {
+ return (Vmm.Memory, Vmm.GetPhysicalAddress(Position));
+ }
+
+ return ((MemoryManager)Memory, Position);
+ }
+ }
+}