aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
diff options
context:
space:
mode:
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);
+ }
+ }
+}