1
0
mirror of synced 2025-01-19 09:17:30 +01:00

Revert GX2 stuff till fixed

This commit is contained in:
KillzXGaming 2019-04-09 21:16:37 -04:00 committed by GitHub
parent 6414744c28
commit 457e4f6808
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
@ -47,6 +47,8 @@ namespace Switch_Toolbox.Library
public uint[] texRegs; public uint[] texRegs;
}; };
public static int m_configFlags = 4;
public static uint expPitch = 0; public static uint expPitch = 0;
public static uint expHeight = 0; public static uint expHeight = 0;
public static uint expNumSlices = 0; public static uint expNumSlices = 0;
@ -715,6 +717,11 @@ namespace Switch_Toolbox.Library
return (n + d - 1) / d; return (n + d - 1) / d;
} }
private static uint powTwoAlign_0(uint x, uint align)
{
return (x + align - 1) & ~(align - 1);
}
/*--------------------------------------- /*---------------------------------------
* *
@ -746,15 +753,15 @@ namespace Switch_Toolbox.Library
public static byte[] deswizzle(uint width, uint height, uint depth, uint height_, uint format_, uint tileMode, uint swizzle_, public static byte[] deswizzle(uint width, uint height, uint depth, uint height_, uint format_, uint tileMode, uint swizzle_,
uint pitch, uint bpp, byte[] data, int depthLevel) uint pitch, uint bpp, byte[] data, int depthLevel)
{ {
return swizzleSurf(width, height, depth, format_, tileMode, swizzle_, pitch, bpp, data, depthLevel, 0); return swizzleSurf(width, height, depth, height_, format_, tileMode, swizzle_, pitch, bpp, data, depthLevel, 0);
} }
public static byte[] swizzle(uint width, uint height, uint depth, uint height_, uint format_, uint tileMode, uint swizzle_, public static byte[] swizzle(uint width, uint height, uint depth, uint height_, uint format_, uint tileMode, uint swizzle_,
uint pitch, uint bpp, byte[] data, int depthLevel) uint pitch, uint bpp, byte[] data, int depthLevel)
{ {
return swizzleSurf(width, height, depth, format_, tileMode, swizzle_, pitch, bpp, data, depthLevel, 1); return swizzleSurf(width, height, depth, height_, format_, tileMode, swizzle_, pitch, bpp, data, depthLevel, 1);
} }
private static byte[] swizzleSurf(uint width, uint height,uint depth, uint format, uint tileMode, uint swizzle_, private static byte[] swizzleSurf(uint width, uint height,uint depth, uint height_, uint format, uint tileMode, uint swizzle_,
uint pitch, uint bitsPerPixel, byte[] data, int depthLevel, int swizzle) uint pitch, uint bitsPerPixel, byte[] data, int depthLevel, int swizzle)
{ {
uint bytesPerPixel = bitsPerPixel / 8; uint bytesPerPixel = bitsPerPixel / 8;
@ -791,7 +798,7 @@ namespace Switch_Toolbox.Library
} }
else else
{ {
pos = computeSurfaceAddrFromCoordMacroTiled((uint)x, (uint)y, bitsPerPixel, pitch, height, (AddrTileMode)tileMode, pipeSwizzle, bankSwizzle); pos = computeSurfaceAddrFromCoordMacroTiled((uint)x, (uint)y, bitsPerPixel, pitch, height_, (AddrTileMode)tileMode, pipeSwizzle, bankSwizzle);
} }
@ -1019,7 +1026,7 @@ namespace Switch_Toolbox.Library
} }
} }
private static uint computeSurfaceBankSwappedWidth(AddrTileMode tileMode, uint bpp, uint numSamples, uint pitch) private static uint computeSurfaceBankSwappedWidth(AddrTileMode tileMode, uint bpp, uint pitch, uint numSamples)
{ {
if (isBankSwappedTileMode(tileMode) == 0) if (isBankSwappedTileMode(tileMode) == 0)
return 0; return 0;
@ -1154,15 +1161,24 @@ namespace Switch_Toolbox.Library
uint macroTileIndexY = y / macroTileHeight; uint macroTileIndexY = y / macroTileHeight;
ulong macroTileOffset = (macroTileIndexX + macroTilesPerRow * macroTileIndexY) * macroTileBytes; ulong macroTileOffset = (macroTileIndexX + macroTilesPerRow * macroTileIndexY) * macroTileBytes;
if (isBankSwappedTileMode(tileMode) != 0) switch (tileMode)
{ {
bankSwapWidth = computeSurfaceBankSwappedWidth(tileMode, bpp, 1, pitch); case AddrTileMode.ADDR_TM_2B_TILED_THIN1:
case AddrTileMode.ADDR_TM_2B_TILED_THIN2:
case AddrTileMode.ADDR_TM_2B_TILED_THIN4:
case AddrTileMode.ADDR_TM_2B_TILED_THICK:
case AddrTileMode.ADDR_TM_3B_TILED_THIN1:
case AddrTileMode.ADDR_TM_3B_TILED_THICK:
{
bankSwapWidth = computeSurfaceBankSwappedWidth(tileMode, bpp, pitch, 1);
swapIndex = macroTilePitch * macroTileIndexX / bankSwapWidth; swapIndex = macroTilePitch * macroTileIndexX / bankSwapWidth;
bank ^= bankSwapOrder[swapIndex & 3]; bank ^= bankSwapOrder[swapIndex & 3];
break;
}
} }
ulong totalOffset = elemOffset + ((macroTileOffset + sliceOffset) >> 3); ulong totalOffset = elemOffset + ((macroTileOffset + sliceOffset) >> 3);
return bank << 9 | pipe << 8 | totalOffset & 255 | (ulong)((int)totalOffset & -256) << 3; return bank << 9 | pipe << 8 | 255 & totalOffset | (ulong)((int)totalOffset & -256) << 3;
} }
public static uint computeSurfaceMipLevelTileMode(uint baseTileMode, uint bpp, uint level, uint width, uint height, public static uint computeSurfaceMipLevelTileMode(uint baseTileMode, uint bpp, uint level, uint width, uint height,
@ -1210,9 +1226,8 @@ namespace Switch_Toolbox.Library
if (DebugSurface) if (DebugSurface)
Console.WriteLine("computeSurfaceMipLevelTileMode expTileMode " + expTileMode); Console.WriteLine("computeSurfaceMipLevelTileMode expTileMode " + expTileMode);
if (noRecursive != 0 || level == 0) if (noRecursive == 0)
return expTileMode; {
switch (bpp) switch (bpp)
{ {
case 24: case 24:
@ -1226,6 +1241,8 @@ namespace Switch_Toolbox.Library
heighta = nextPow2(height); heighta = nextPow2(height);
numSlicesa = nextPow2(numSlices); numSlicesa = nextPow2(numSlices);
if (level != 0)
{
expTileMode = convertToNonBankSwappedMode((AddrTileMode)expTileMode); expTileMode = convertToNonBankSwappedMode((AddrTileMode)expTileMode);
thickness = computeSurfaceThickness((AddrTileMode)expTileMode); thickness = computeSurfaceThickness((AddrTileMode)expTileMode);
microTileBytes = (numSamples * bpp * (thickness << 6) + 7) >> 3; microTileBytes = (numSamples * bpp * (thickness << 6) + 7) >> 3;
@ -1282,7 +1299,10 @@ namespace Switch_Toolbox.Library
isDepth, isDepth,
1); 1);
} }
}
return expTileMode;
}
private static uint computeSurfaceTileSlices(uint tileMode, uint bpp, uint numSamples) private static uint computeSurfaceTileSlices(uint tileMode, uint bpp, uint numSamples)
{ {
uint bytePerSample = ((bpp << 6) + 7) >> 3; uint bytePerSample = ((bpp << 6) + 7) >> 3;
@ -1302,6 +1322,11 @@ namespace Switch_Toolbox.Library
return tileSlices; return tileSlices;
} }
private static int getFillSizeFieldsFlags()
{
return (m_configFlags >> 6) & 1;
}
private static uint ComputeSurfaceInfoEx() private static uint ComputeSurfaceInfoEx()
{ {
uint tileMode = pIn.tileMode; uint tileMode = pIn.tileMode;
@ -1551,6 +1576,7 @@ namespace Switch_Toolbox.Library
tileMode, tileMode,
padDims, padDims,
(flags.value >> 4) & 1, (flags.value >> 4) & 1,
(flags.value >> 7) & 1,
pitchAlign, pitchAlign,
heightAlign, heightAlign,
microTileThickness); microTileThickness);
@ -1789,6 +1815,7 @@ namespace Switch_Toolbox.Library
expTileMode, expTileMode,
padDims, padDims,
(flags.value >> 4) & 1, (flags.value >> 4) & 1,
(flags.value >> 7) & 1,
pitchAlign, pitchAlign,
heightAlign, heightAlign,
microTileThickness); microTileThickness);
@ -1816,7 +1843,14 @@ namespace Switch_Toolbox.Library
return new uint[] { valid, pPitchOut, pHeightOut, pNumSlicesOut, pSurfSize, pTileModeOut, pBaseAlign, pPitchAlign, pHeightAlign, pDepthAlign }; return new uint[] { valid, pPitchOut, pHeightOut, pNumSlicesOut, pSurfSize, pTileModeOut, pBaseAlign, pPitchAlign, pHeightAlign, pDepthAlign };
} }
private static Tuple<uint, uint, uint> padDimensions(uint tileMode, uint padDims, uint isCube, uint pitchAlign, uint heightAlign, uint sliceAlign) private static uint IsPow2(uint dim)
{
if ((dim & (dim - 1)) == 0)
return 1;
else
return 0;
}
private static Tuple<uint, uint, uint> padDimensions(uint tileMode, uint padDims, uint isCube, uint cubeAsArray, uint pitchAlign, uint heightAlign, uint sliceAlign)
{ {
uint thickness = computeSurfaceThickness((AddrTileMode)tileMode); uint thickness = computeSurfaceThickness((AddrTileMode)tileMode);
if (padDims == 0) if (padDims == 0)
@ -1826,7 +1860,7 @@ namespace Switch_Toolbox.Library
expPitch = powTwoAlign(expPitch, pitchAlign); expPitch = powTwoAlign(expPitch, pitchAlign);
else else
{ {
expPitch += pitchAlign - 1; expPitch = pitchAlign + expPitch - 1;
expPitch /= pitchAlign; expPitch /= pitchAlign;
expPitch *= pitchAlign; expPitch *= pitchAlign;
} }
@ -1836,7 +1870,7 @@ namespace Switch_Toolbox.Library
if (padDims > 2 || thickness > 1) if (padDims > 2 || thickness > 1)
{ {
if (isCube != 0) if (isCube != 0 || cubeAsArray != 0)
expNumSlices = nextPow2(expNumSlices); expNumSlices = nextPow2(expNumSlices);
if (thickness > 1) if (thickness > 1)
@ -1901,7 +1935,7 @@ namespace Switch_Toolbox.Library
macroWidth = tup.Item4; macroWidth = tup.Item4;
macroHeight = tup.Item5; macroHeight = tup.Item5;
bankSwappedWidth = computeSurfaceBankSwappedWidth((AddrTileMode)tileMode, bpp, numSamples, pitch); bankSwappedWidth = computeSurfaceBankSwappedWidth((AddrTileMode)tileMode, bpp, pitch, numSamples);
if (bankSwappedWidth > pitchAlign) if (bankSwappedWidth > pitchAlign)
pitchAlign = bankSwappedWidth; pitchAlign = bankSwappedWidth;
@ -1912,7 +1946,8 @@ namespace Switch_Toolbox.Library
(flags.value >> 4) & 1, (flags.value >> 4) & 1,
(flags.value >> 7) & 1, (flags.value >> 7) & 1,
pitchAlign, pitchAlign,
heightAlign); heightAlign,
microTileThickness);
expPitch = padDimens.Item1; expPitch = padDimens.Item1;
expHeight = padDimens.Item2; expHeight = padDimens.Item2;
@ -1987,7 +2022,7 @@ namespace Switch_Toolbox.Library
macroWidth = tup.Item4; macroWidth = tup.Item4;
macroHeight = tup.Item5; macroHeight = tup.Item5;
bankSwappedWidth = computeSurfaceBankSwappedWidth((AddrTileMode)tileMode, bpp, numSamples, pitch); bankSwappedWidth = computeSurfaceBankSwappedWidth((AddrTileMode)tileMode, bpp, pitch, numSamples);
if (bankSwappedWidth > pitchAlign) if (bankSwappedWidth > pitchAlign)
pitchAlign = bankSwappedWidth; pitchAlign = bankSwappedWidth;
@ -1997,7 +2032,8 @@ namespace Switch_Toolbox.Library
(flags.value >> 4) & 1, (flags.value >> 4) & 1,
(flags.value >> 7) & 1, (flags.value >> 7) & 1,
pitchAlign, pitchAlign,
heightAlign); heightAlign,
microTileThickness);
expPitch = padDimens.Item1; expPitch = padDimens.Item1;
expHeight = padDimens.Item2; expHeight = padDimens.Item2;
@ -2082,7 +2118,7 @@ namespace Switch_Toolbox.Library
private static uint adjustPitchAlignment(Flags flags, uint pitchAlign) private static uint adjustPitchAlignment(Flags flags, uint pitchAlign)
{ {
if (((flags.value >> 13) & 1) != 0) if (((flags.value >> 13) & 1) != 0)
pitchAlign = powTwoAlign(pitchAlign, 0x20); pitchAlign = powTwoAlign_0(pitchAlign, 0x20);
return pitchAlign; return pitchAlign;
} }
@ -2163,6 +2199,10 @@ namespace Switch_Toolbox.Library
return 0; return 0;
} }
private static uint useTileIndex(int index)
{
return 0;
}
private static void computeMipLevel() private static void computeMipLevel()
{ {
uint slices = 0; uint slices = 0;
@ -2479,9 +2519,6 @@ namespace Switch_Toolbox.Library
pSurfOut = pOut; pSurfOut = pOut;
} }
if (pSurfOut.tileMode == 0)
pSurfOut.tileMode = 16;
return pSurfOut; return pSurfOut;
} }
} }