mirror of https://github.com/PCSX2/pcsx2.git
zzogl-pg: Add Swizzle function arrays.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3525 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
30a911f9f8
commit
48bbe19bd3
|
@ -172,7 +172,7 @@ static __forceinline int FinishTransfer(TransferData data, int nLeftOver)
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
static __forceinline int RealTransfer(TransferData data, TransferFuncts fun, const void* pbyMem, u32 nQWordSize)
|
static __forceinline int RealTransfer(TransferData data, /*TransferFuncts fun,*/ const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
assert(gs.imageTransfer == 0);
|
assert(gs.imageTransfer == 0);
|
||||||
|
|
||||||
|
@ -183,6 +183,7 @@ static __forceinline int RealTransfer(TransferData data, TransferFuncts fun, con
|
||||||
tempY = gs.imageY;
|
tempY = gs.imageY;
|
||||||
tempX = gs.imageX;
|
tempX = gs.imageX;
|
||||||
Point alignedPt;
|
Point alignedPt;
|
||||||
|
TransferFuncts fun(data.psm);
|
||||||
|
|
||||||
nSize = (nQWordSize * 4 * 2) / tp2;
|
nSize = (nQWordSize * 4 * 2) / tp2;
|
||||||
nSize = min(nSize, gs.imageWnew * gs.imageHnew);
|
nSize = min(nSize, gs.imageWnew * gs.imageHnew);
|
||||||
|
@ -212,121 +213,82 @@ static __forceinline int RealTransfer(TransferData data, TransferFuncts fun, con
|
||||||
return FinishTransfer(data, nLeftOver);
|
return FinishTransfer(data, nLeftOver);
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(32, u32, 2, 32, 8, 8, _, SwizzleBlock32);
|
|
||||||
int TransferHostLocal32(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal32(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(2, 32, 8, 8, 32, PSMCT32);
|
TransferData data(2, 32, 8, 8, 32, PSMCT32);
|
||||||
TransferFuncts fun(writePixel32_0, getPixelAddress32_0, SwizzleBlock32, SwizzleBlock32u);
|
return RealTransfer<u32>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u32>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(32Z, u32, 2, 32, 8, 8, _, SwizzleBlock32);
|
|
||||||
int TransferHostLocal32Z(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal32Z(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(2, 32, 8, 8, 32, PSMT32Z);
|
TransferData data(2, 32, 8, 8, 32, PSMT32Z);
|
||||||
TransferFuncts fun(writePixel32Z_0, getPixelAddress32Z_0, SwizzleBlock32, SwizzleBlock32u);
|
return RealTransfer<u32>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u32>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(24, u8, 8, 32, 8, 8, _24, SwizzleBlock24);
|
|
||||||
int TransferHostLocal24(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal24(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(8, 32, 8, 8, 24, PSMCT24);
|
TransferData data(8, 32, 8, 8, 24, PSMCT24);
|
||||||
TransferFuncts fun(writePixel24_0, getPixelAddress24_0, SwizzleBlock24, SwizzleBlock24u);
|
return RealTransfer<u8>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u8>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(24Z, u8, 8, 32, 8, 8, _24, SwizzleBlock24);
|
|
||||||
int TransferHostLocal24Z(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal24Z(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(8, 32, 8, 8, 24, PSMT24Z);
|
TransferData data(8, 32, 8, 8, 24, PSMT24Z);
|
||||||
TransferFuncts fun(writePixel24Z_0, getPixelAddress24Z_0, SwizzleBlock24, SwizzleBlock24u);
|
return RealTransfer<u8>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u8>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(16, u16, 4, 16, 16, 8, _, SwizzleBlock16);
|
|
||||||
int TransferHostLocal16(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal16(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(4, 16, 16, 8, 16, PSMCT16);
|
TransferData data(4, 16, 16, 8, 16, PSMCT16);
|
||||||
TransferFuncts fun(writePixel16_0, getPixelAddress16_0, SwizzleBlock16, SwizzleBlock16u);
|
return RealTransfer<u16>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u16>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(16S, u16, 4, 16, 16, 8, _, SwizzleBlock16);
|
|
||||||
int TransferHostLocal16S(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal16S(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(4, 16, 16, 8, 16, PSMCT16S);
|
TransferData data(4, 16, 16, 8, 16, PSMCT16S);
|
||||||
TransferFuncts fun(writePixel16S_0, getPixelAddress16S_0, SwizzleBlock16, SwizzleBlock16u);
|
return RealTransfer<u16>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u16>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(16Z, u16, 4, 16, 16, 8, _, SwizzleBlock16);
|
|
||||||
int TransferHostLocal16Z(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal16Z(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(4, 16, 16, 8, 16, PSMT16Z);
|
TransferData data(4, 16, 16, 8, 16, PSMT16Z);
|
||||||
TransferFuncts fun(writePixel16Z_0, getPixelAddress16Z_0, SwizzleBlock16, SwizzleBlock16u);
|
return RealTransfer<u16>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u16>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(16SZ, u16, 4, 16, 16, 8, _, SwizzleBlock16);
|
|
||||||
int TransferHostLocal16SZ(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal16SZ(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(4, 16, 16, 8, 16, PSMT16SZ);
|
TransferData data(4, 16, 16, 8, 16, PSMT16SZ);
|
||||||
TransferFuncts fun(writePixel16SZ_0, getPixelAddress16SZ_0, SwizzleBlock16, SwizzleBlock16u);
|
return RealTransfer<u16>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u16>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(8, u8, 4, 8, 16, 16, _, SwizzleBlock8);
|
|
||||||
int TransferHostLocal8(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal8(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(4, 8, 16, 16, 8, PSMT8);
|
TransferData data(4, 8, 16, 16, 8, PSMT8);
|
||||||
TransferFuncts fun(writePixel8_0, getPixelAddress8_0, SwizzleBlock8, SwizzleBlock8u);
|
return RealTransfer<u8>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u8>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(4, u8, 8, 4, 32, 16, _4, SwizzleBlock4);
|
|
||||||
int TransferHostLocal4(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal4(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(8, 4, 32, 16, 4, PSMT4);
|
TransferData data(8, 4, 32, 16, 4, PSMT4);
|
||||||
TransferFuncts fun(writePixel4_0, getPixelAddress4_0, SwizzleBlock4, SwizzleBlock4u);
|
return RealTransfer<u8>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u8>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(8H, u8, 4, 32, 8, 8, _, SwizzleBlock8H);
|
|
||||||
int TransferHostLocal8H(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal8H(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(4, 32, 8, 8, 8, PSMT8H);
|
TransferData data(4, 32, 8, 8, 8, PSMT8H);
|
||||||
TransferFuncts fun(writePixel8H_0, getPixelAddress8H_0, SwizzleBlock8H, SwizzleBlock8Hu);
|
return RealTransfer<u8>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u8>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(4HL, u8, 8, 32, 8, 8, _4, SwizzleBlock4HL);
|
|
||||||
int TransferHostLocal4HL(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal4HL(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(8, 32, 8, 8, 4, PSMT4HL);
|
TransferData data(8, 32, 8, 8, 4, PSMT4HL);
|
||||||
TransferFuncts fun(writePixel4HL_0, getPixelAddress4HL_0, SwizzleBlock4HL, SwizzleBlock4HLu);
|
return RealTransfer<u8>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u8>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEFINE_TRANSFERLOCAL(4HH, u8, 8, 32, 8, 8, _4, SwizzleBlock4HH);
|
|
||||||
int TransferHostLocal4HH(const void* pbyMem, u32 nQWordSize)
|
int TransferHostLocal4HH(const void* pbyMem, u32 nQWordSize)
|
||||||
{
|
{
|
||||||
TransferData data(8, 32, 8, 8, 4, PSMT4HH);
|
TransferData data(8, 32, 8, 8, 4, PSMT4HH);
|
||||||
TransferFuncts fun(writePixel4HH_0, getPixelAddress4HH_0, SwizzleBlock4HH, SwizzleBlock4HHu);
|
return RealTransfer<u8>(data, pbyMem, nQWordSize);
|
||||||
|
|
||||||
return RealTransfer<u8>(data, fun, pbyMem, nQWordSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransferLocalHost32(void* pbyMem, u32 nQWordSize) { FUNCLOG }
|
void TransferLocalHost32(void* pbyMem, u32 nQWordSize) { FUNCLOG }
|
||||||
|
|
|
@ -47,6 +47,8 @@ typedef void (*_SwizzleBlock)(u8 *dst, u8 *src, int pitch, u32 WriteMask);
|
||||||
extern _getPixelAddress_0 getPixelFun_0[64];
|
extern _getPixelAddress_0 getPixelFun_0[64];
|
||||||
extern _writePixel_0 writePixelFun_0[64];
|
extern _writePixel_0 writePixelFun_0[64];
|
||||||
extern _readPixel_0 readPixelFun_0[64];
|
extern _readPixel_0 readPixelFun_0[64];
|
||||||
|
extern _SwizzleBlock swizzleBlockFun[64];
|
||||||
|
extern _SwizzleBlock swizzleBlockUnFun[64];
|
||||||
|
|
||||||
// Both of the following structs should probably be local class variables or in a namespace,
|
// Both of the following structs should probably be local class variables or in a namespace,
|
||||||
// but this works for the moment.
|
// but this works for the moment.
|
||||||
|
@ -83,6 +85,13 @@ struct TransferFuncts
|
||||||
Swizzle = s;
|
Swizzle = s;
|
||||||
Swizzle_u = su;
|
Swizzle_u = su;
|
||||||
}
|
}
|
||||||
|
__forceinline TransferFuncts(u32 psm)
|
||||||
|
{
|
||||||
|
wp = writePixelFun_0[psm];
|
||||||
|
gp = getPixelFun_0[psm];
|
||||||
|
Swizzle = swizzleBlockFun[psm];
|
||||||
|
Swizzle_u = swizzleBlockUnFun[psm];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// rest not visible externally
|
// rest not visible externally
|
||||||
|
|
|
@ -49,4 +49,16 @@ extern __forceinline void SwizzleBlock4HL(u8 *dst, u8 *src, int pitch, u32 Write
|
||||||
#define SwizzleBlock4HHu SwizzleBlock4HH
|
#define SwizzleBlock4HHu SwizzleBlock4HH
|
||||||
#define SwizzleBlock4HLu SwizzleBlock4HL
|
#define SwizzleBlock4HLu SwizzleBlock4HL
|
||||||
|
|
||||||
|
#define SwizzleBlock16S SwizzleBlock16
|
||||||
|
#define SwizzleBlock32Z SwizzleBlock32
|
||||||
|
#define SwizzleBlock24Z SwizzleBlock24
|
||||||
|
#define SwizzleBlock16Z SwizzleBlock16
|
||||||
|
#define SwizzleBlock16SZ SwizzleBlock16
|
||||||
|
|
||||||
|
#define SwizzleBlock16Su SwizzleBlock16u
|
||||||
|
#define SwizzleBlock32Zu SwizzleBlock32u
|
||||||
|
#define SwizzleBlock24Zu SwizzleBlock24u
|
||||||
|
#define SwizzleBlock16Zu SwizzleBlock16u
|
||||||
|
#define SwizzleBlock16SZu SwizzleBlock16u
|
||||||
|
|
||||||
#endif // MEM_SWIZZLE_H_INCLUDED
|
#endif // MEM_SWIZZLE_H_INCLUDED
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "GS.h"
|
#include "GS.h"
|
||||||
#include "Mem.h"
|
#include "Mem.h"
|
||||||
|
#include "Mem_Swizzle.h"
|
||||||
|
|
||||||
u32 g_blockTable32[4][8] =
|
u32 g_blockTable32[4][8] =
|
||||||
{
|
{
|
||||||
|
@ -269,6 +270,26 @@ char* psm_name[64] =
|
||||||
"PSMT32Z", "PSMT24Z", "PSMT16Z", NULL, NULL, NULL, NULL, NULL,
|
"PSMT32Z", "PSMT24Z", "PSMT16Z", NULL, NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, "PSMT16SZ", NULL, NULL, NULL, NULL, NULL };
|
NULL, NULL, "PSMT16SZ", NULL, NULL, NULL, NULL, NULL };
|
||||||
|
|
||||||
|
_SwizzleBlock swizzleBlockFun[64] =
|
||||||
|
{ SwizzleBlock32, SwizzleBlock24, SwizzleBlock16, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, SwizzleBlock16S, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, SwizzleBlock8, SwizzleBlock4, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, SwizzleBlock8H, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, SwizzleBlock4HL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, SwizzleBlock4HH, NULL, NULL, NULL,
|
||||||
|
SwizzleBlock32Z, SwizzleBlock24Z, SwizzleBlock16Z, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, SwizzleBlock16SZ, NULL, NULL, NULL, NULL, NULL };
|
||||||
|
|
||||||
|
_SwizzleBlock swizzleBlockUnFun[64] =
|
||||||
|
{ SwizzleBlock32u, SwizzleBlock24u, SwizzleBlock16u, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, SwizzleBlock16Su, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, SwizzleBlock8u, SwizzleBlock4u, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, SwizzleBlock8Hu, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, SwizzleBlock4HLu, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, SwizzleBlock4HHu, NULL, NULL, NULL,
|
||||||
|
SwizzleBlock32Zu, SwizzleBlock24Zu, SwizzleBlock16Zu, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, SwizzleBlock16SZu, NULL, NULL, NULL, NULL, NULL };
|
||||||
|
|
||||||
_getPixelAddress_0 getPixelFun_0[64] =
|
_getPixelAddress_0 getPixelFun_0[64] =
|
||||||
{
|
{
|
||||||
getPixelAddress32_0, getPixelAddress24_0, getPixelAddress16_0, NULL, NULL, NULL, NULL, NULL,
|
getPixelAddress32_0, getPixelAddress24_0, getPixelAddress16_0, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
Loading…
Reference in New Issue