zzogl-pg: Get rid of some annoying spam when debugging, and remove some old code.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3324 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2010-06-27 08:51:24 +00:00
parent 8f46aea568
commit dceefdf22b
3 changed files with 26 additions and 327 deletions

View File

@ -25,37 +25,6 @@
static int count = 0; static int count = 0;
#endif #endif
/*void _GSgifPacket(pathInfo *path, u32 *pMem) // 128bit
{
FUNCLOG
int reg = (int)((path->regs >> path->regn) & 0xf);
g_GIFPackedRegHandlers[reg](pMem);
path->regn += 4;
if (path->nreg == path->regn)
{
path->regn = 0;
path->nloop--;
}
}
void _GSgifRegList(pathInfo *path, u32 *pMem) // 64bit
{
FUNCLOG
int reg = (int)((path->regs >> path->regn) & 0xf);
g_GIFRegHandlers[reg](pMem);
path->regn += 4;
if (path->nreg == path->regn)
{
path->regn = 0;
path->nloop--;
}
}*/
static int nPath3Hack = 0; static int nPath3Hack = 0;
void CALLBACK GSgetLastTag(u64* ptag) void CALLBACK GSgetLastTag(u64* ptag)
@ -73,12 +42,12 @@ extern HANDLE g_hCurrentThread;
__forceinline void gifTransferLog(int index, u32 *pMem, u32 size) __forceinline void gifTransferLog(int index, u32 *pMem, u32 size)
{ {
#ifdef _DEBUG #ifdef DEBUG_TRANSFER
if (conf.log /*& 0x20*/) if (conf.log /*& 0x20*/)
{ {
static int nSaveIndex = 0; static int nSaveIndex = 0;
ZZLog::GS_Log("%d: p:%d %x", nSaveIndex++, index + 1, size); ZZLog::Debug_Log("%d: p:%d %x", nSaveIndex++, index + 1, size);
int vals[4] = {0}; int vals[4] = {0};
for (u32 i = 0; i < size; i++) for (u32 i = 0; i < size; i++)
@ -87,13 +56,12 @@ __forceinline void gifTransferLog(int index, u32 *pMem, u32 size)
vals[j] ^= pMem[4*i+j]; vals[j] ^= pMem[4*i+j];
} }
ZZLog::GS_Log("%x %x %x %x", vals[0], vals[1], vals[2], vals[3]); ZZLog::Debug_Log("%x %x %x %x", vals[0], vals[1], vals[2], vals[3]);
} }
#endif #endif
} }
#ifdef NEW_GIF_TRANSFER
extern int g_GSMultiThreaded; extern int g_GSMultiThreaded;
template<int index> void _GSgifTransfer(u32 *pMem, u32 size) template<int index> void _GSgifTransfer(u32 *pMem, u32 size)
@ -294,240 +262,3 @@ void CALLBACK GSgifTransfer3(u32 *pMem, u32 size)
_GSgifTransfer<2>(pMem, size); _GSgifTransfer<2>(pMem, size);
} }
#else
template<int index> void _GSgifTransfer(u32 *pMem, u32 size)
{
FUNCLOG
pathInfo *path = &gs.path[index];
#ifdef _WIN32
assert(g_hCurrentThread == GetCurrentThread());
#endif
#ifdef _DEBUG
gifTransferLog(index, pMem, size);
#endif
while (size > 0)
{
//LOG(_T("Transfer(%08x, %d) START\n"), pMem, size);
if (path->nloop == 0)
{
path->setTag(pMem);
gs.q = 1;
pMem += 4;
size--;
if ((conf.settings() & GAME_PATH3HACK) && (index == 2) && path->eop) nPath3Hack = 1;
if (index == 0)
{
if (path->mode == GIF_FLG_PACKED)
{
// check if 0xb is in any reg, if yes, exit (kh2)
for (int i = 0; i < path->nreg; i += 4)
{
if (((path->regs >> i) & 0xf) == 11)
{
ERROR_LOG_SPAM("Invalid unpack type\n");
path->nloop = 0;
return;
}
}
}
}
if (path->nloop == 0)
{
if (index == 0)
{
// ffx hack
if (path->eop) return;
continue;
}
/*if( !path->eop )
{
//ZZLog::Debug_Log("Continuing from eop.");
continue;
}*/
// Issue 174 fix!
continue;
}
}
switch (path->mode)
{
case GIF_FLG_PACKED:
{
assert(path->nloop > 0);
for (; size > 0; size--, pMem += 4)
{
int reg = (int)((path->regs >> path->regn) & 0xf);
g_GIFPackedRegHandlers[reg](pMem);
path->regn += 4;
if (path->nreg == path->regn)
{
path->regn = 0;
if (path->nloop-- <= 1)
{
size--;
pMem += 4;
break;
}
}
}
break;
}
case GIF_FLG_REGLIST:
{
//GS_LOG("%8.8x%8.8x %d L", ((u32*)&gs.regs)[1], *(u32*)&gs.regs, path->tag.nreg/4);
assert(path->nloop > 0);
size *= 2;
for (; size > 0; pMem += 2, size--)
{
int reg = (int)((path->regs >> path->regn) & 0xf);
g_GIFRegHandlers[reg](pMem);
path->regn += 4;
if (path->nreg == path->regn)
{
path->regn = 0;
if (path->nloop-- <= 1)
{
size--;
pMem += 2;
break;
}
}
}
if (size & 1) pMem += 2;
size /= 2;
break;
}
case GIF_FLG_IMAGE: // FROM_VFRAM
case GIF_FLG_IMAGE2: // Used in the DirectX version, so we'll use it here too.
{
if (gs.imageTransfer >= 0 && gs.imageTransfer <= 1)
{
int process = min((int)size, path->nloop);
if (process > 0)
{
if (gs.imageTransfer)
ZeroGS::TransferLocalHost(pMem, process);
else
ZeroGS::TransferHostLocal(pMem, process*4);
path->nloop -= process;
pMem += process * 4;
size -= process;
assert(size == 0 || path->nloop == 0);
}
break;
}
else
{
// simulate
int process = min((int)size, path->nloop);
path->nloop -= process;
pMem += process * 4;
size -= process;
}
break;
}
default: // GIF_IMAGE
ZZLog::GS_Log("*** WARNING **** Unexpected GIFTag flag.");
assert(0);
path->nloop = 0;
break;
}
if ((index == 0) && path->eop) return;
}
// This is the case when not all data was readed from one try: VU1 has too much data.
// So we should redo reading from the start.
if ((index == 0) && size == 0 && path->nloop > 0)
{
ERROR_LOG_SPAMA("VU1 too much data, ignore if gfx are fine %d\n", path->nloop)
// TODO: this code is not working correctly. Anyway, ringing work only in single-threaded mode.
// _GSgifTransfer(&gs.path[0], (u32*)((u8*)pMem-0x4000), (0x4000)/16);
}
}
void CALLBACK GSgifTransfer1(u32 *pMem, u32 addr)
{
FUNCLOG
pathInfo *path = &gs.path[0];
//ZZLog::GS_Log("GSgifTransfer1 0x%x (mode %d).", addr, path->mode);
// addr &= 0x3fff;
#ifdef _DEBUG
ZZLog::Prim_Log("count: %d\n", count);
count++;
#endif
path->nloop = 0;
path->eop = 0;
_GSgifTransfer<0>((u32*)((u8*)pMem + addr), (0x4000 - addr) / 16);
if (!path->eop && (path->nloop > 0))
{
assert((addr&0xf) == 0); //BUG
path->nloop = 0;
ZZLog::Debug_Log("Transfer1 - 2.");
return;
}
}
void CALLBACK GSgifTransfer2(u32 *pMem, u32 size)
{
FUNCLOG
//ZZLog::GS_Log("GSgifTransfer2 size = %lx (mode %d, gs.path2.tag.nloop = %d).", size, gs.path[1].mode, gs.path[1].tag.nloop);
_GSgifTransfer<1>(pMem, size);
}
void CALLBACK GSgifTransfer3(u32 *pMem, u32 size)
{
FUNCLOG
//ZZLog::GS_Log("GSgifTransfer3 size = %lx (mode %d, gs.path3.tag.nloop = %d).", size, gs.path[2].mode, gs.path[2].tag.nloop);
nPath3Hack = 0;
_GSgifTransfer<2>(pMem, size);
}
#endif

View File

@ -22,9 +22,6 @@
#include "Regs.h" #include "Regs.h"
#include "Util.h" #include "Util.h"
// If you notice bugs in the newest revisions, you might try disabling this,
// to see if they are related.
#define NEW_GIF_TRANSFER
enum GIF_FLG enum GIF_FLG
{ {
GIF_FLG_PACKED = 0, GIF_FLG_PACKED = 0,
@ -73,7 +70,6 @@ union GIFTag
typedef struct typedef struct
{ {
#ifdef NEW_GIF_TRANSFER
u32 mode; u32 mode;
int reg; int reg;
u64 regs; u64 regs;
@ -82,18 +78,7 @@ typedef struct
int nreg; int nreg;
u32 adonly; u32 adonly;
GIFTag tag; GIFTag tag;
#else
int mode;
int regn;
u64 regs;
int nloop;
int eop;
int nreg;
u32 adonly;
GIFTag tag;
#endif
#ifdef NEW_GIF_TRANSFER
void setTag(u32 *data) void setTag(u32 *data)
{ {
tag.set(data); tag.set(data);
@ -133,43 +118,6 @@ typedef struct
return true; return true;
} }
#else
void setTag(u32 *data)
{
tag.set(data);
nloop = tag.NLOOP;
eop = tag.EOP;
u32 tagpre = tag.PRE;
u32 tagprim = tag.PRIM;
u32 tagflg = tag.FLG;
// Hmm....
nreg = tag.NREG << 2;
if (nreg == 0) nreg = 64;
// ZZLog::GS_Log("GIFtag: %8.8lx_%8.8lx_%8.8lx_%8.8lx: EOP=%d, NLOOP=%x, FLG=%x, NREG=%d, PRE=%d",
// data[3], data[2], data[1], data[0],
// path->eop, path->nloop, tagflg, path->nreg, tagpre);
mode = tagflg;
switch (mode)
{
case GIF_FLG_PACKED:
regs = *(u64 *)(data + 2);
regn = 0;
if (tagpre) GIFRegHandlerPRIM((u32*)&tagprim);
break;
case GIF_FLG_REGLIST:
regs = *(u64 *)(data + 2);
regn = 0;
break;
}
}
#endif
} pathInfo; } pathInfo;
void _GSgifPacket(pathInfo *path, u32 *pMem); void _GSgifPacket(pathInfo *path, u32 *pMem);

View File

@ -178,6 +178,26 @@ void __fastcall GIFRegHandlerLABEL(u32* data);
// GifReg & GifPackedReg structs from GSdx, slightly modified // GifReg & GifPackedReg structs from GSdx, slightly modified
enum GS_ATST
{
ATST_NEVER = 0,
ATST_ALWAYS = 1,
ATST_LESS = 2,
ATST_LEQUAL = 3,
ATST_EQUAL = 4,
ATST_GEQUAL = 5,
ATST_GREATER = 6,
ATST_NOTEQUAL = 7,
};
enum GS_AFAIL
{
AFAIL_KEEP = 0,
AFAIL_FB_ONLY = 1,
AFAIL_ZB_ONLY = 2,
AFAIL_RGB_ONLY = 3,
};
// GIFReg // GIFReg
REG64_(GIFReg, ALPHA) REG64_(GIFReg, ALPHA)
@ -439,9 +459,9 @@ REG64_(GIFReg, TEST)
u32 _PAD1:13; u32 _PAD1:13;
u32 _PAD2:32; u32 _PAD2:32;
REG_END2 REG_END2
__forceinline bool DoFirstPass() {/*return !ATE || ATST != ATST_NEVER;*/} // not all pixels fail automatically __forceinline bool DoFirstPass() {return !ATE || ATST != ATST_NEVER;} // not all pixels fail automatically
__forceinline bool DoSecondPass() {/*return ATE && ATST != ATST_ALWAYS && AFAIL != AFAIL_KEEP;*/} // pixels may fail, write fb/z __forceinline bool DoSecondPass() {return ATE && ATST != ATST_ALWAYS && AFAIL != AFAIL_KEEP;} // pixels may fail, write fb/z
__forceinline bool NoSecondPass() {/*return ATE && ATST != ATST_ALWAYS && AFAIL == AFAIL_KEEP;*/} // pixels may fail, no output __forceinline bool NoSecondPass() {return ATE && ATST != ATST_ALWAYS && AFAIL == AFAIL_KEEP;} // pixels may fail, no output
REG_END2 REG_END2
REG64_(GIFReg, TEX0) REG64_(GIFReg, TEX0)