| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using ChocolArm64.Memory;
- using Ryujinx.Common;
- 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 BlockHeight = ImageUtils.GetBlockHeight (Image.Format);
- int BlockDepth = ImageUtils.GetBlockDepth (Image.Format);
- int BytesPerPixel = ImageUtils.GetBytesPerPixel(Image.Format);
- int Width = BitUtils.DivRoundUp(Image.Width, BlockWidth);
- int Height = BitUtils.DivRoundUp(Image.Height, BlockHeight);
- int Depth = BitUtils.DivRoundUp(Image.Depth, BlockDepth);
- if (Image.Layout == GalMemoryLayout.BlockLinear)
- {
- int AlignMask = Image.TileWidth * (64 / BytesPerPixel) - 1;
- Width = (Width + AlignMask) & ~AlignMask;
- return new BlockLinearSwizzle(
- Width,
- Height,
- Depth,
- Image.GobBlockHeight,
- Image.GobBlockDepth,
- BytesPerPixel);
- }
- else
- {
- return new LinearSwizzle(Image.Pitch, BytesPerPixel, Width, Height);
- }
- }
- 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);
- }
- }
- }
|