zzogl-pg: Printing to the console now works. Fixed AA+/-. Misc. pcsx2: Took care of two non-POD safe objects.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3259 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2010-06-21 12:03:14 +00:00
parent e98ef1a357
commit 85657682da
13 changed files with 98 additions and 65 deletions

View File

@ -30,7 +30,7 @@ Dialogs::ImportSettingsDialog::ImportSettingsDialog( wxWindow* parent )
L"Existing %s settings have been found in the configured settings folder. " L"Existing %s settings have been found in the configured settings folder. "
L"Would you like to import these settings or overwrite them with %s default values?" L"Would you like to import these settings or overwrite them with %s default values?"
L"\n\n(or press Cancel to select a different settings folder)" L"\n\n(or press Cancel to select a different settings folder)"
), pxGetAppName(), pxGetAppName() ), pxGetAppName().c_str(), pxGetAppName().c_str()
))); )));
wxBoxSizer& s_buttons = *new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer& s_buttons = *new wxBoxSizer( wxHORIZONTAL );

View File

@ -459,6 +459,7 @@ EXPORT_C_(void) SPU2close()
#ifndef __LINUX__ #ifndef __LINUX__
DspCloseLibrary(); DspCloseLibrary();
#endif #endif
spdif_shutdown(); spdif_shutdown();
SndBuffer::Cleanup(); SndBuffer::Cleanup();
} }
@ -477,6 +478,7 @@ EXPORT_C_(void) SPU2shutdown()
s2r_close(); s2r_close();
#endif #endif
FileLog("DoFullDump();\n");
DoFullDump(); DoFullDump();
#ifdef STREAM_DUMP #ifdef STREAM_DUMP
fclose(il0); fclose(il0);
@ -486,14 +488,21 @@ EXPORT_C_(void) SPU2shutdown()
fclose(el0); fclose(el0);
fclose(el1); fclose(el1);
#endif #endif
FileLog("WaveDump::Close();\n");
WaveDump::Close(); WaveDump::Close();
FileLog("DMALogClose();\n");
DMALogClose(); DMALogClose();
FileLog("safe_free(spu2regs);\n");
safe_free(spu2regs); safe_free(spu2regs);
FileLog("safe_free(_spu2mem);\n");
safe_free(_spu2mem); safe_free(_spu2mem);
FileLog("safe_free( pcm_cache_data );\n");
safe_free( pcm_cache_data ); safe_free( pcm_cache_data );
FileLog("Closing log.\n");
#ifdef SPU2_LOG #ifdef SPU2_LOG
if(!AccessLog()) return; if(!AccessLog()) return;
FileLog("[%10d] SPU2shutdown\n",Cycles); FileLog("[%10d] SPU2shutdown\n",Cycles);

View File

@ -156,12 +156,12 @@ void _Log(const char *str)
void _WriteToConsole(const char *str) void _WriteToConsole(const char *str)
{ {
printf("ZZogl-PG: %s", str); fprintf(stderr,"ZZogl-PG: %s", str);
} }
void _Print(const char *str) void _Print(const char *str)
{ {
printf("ZZogl-PG: %s", str); fprintf(stderr,"ZZogl-PG: %s", str);
if (IsLogging()) fprintf(gsLog, str); if (IsLogging()) fprintf(gsLog, str);
} }
@ -195,8 +195,8 @@ void WriteToConsole(const char *fmt, ...)
va_start(list, fmt); va_start(list, fmt);
printf("ZZogl-PG: "); fprintf(stderr, "ZZogl-PG: ");
vprintf(fmt, list); vfprintf(stderr, fmt, list);
va_end(list); va_end(list);
} }
@ -207,14 +207,28 @@ void Print(const char *fmt, ...)
va_start(list, fmt); va_start(list, fmt);
if (IsLogging()) vfprintf(gsLog, fmt, list); if (IsLogging()) vfprintf(gsLog, fmt, list);
printf("ZZogl-PG: "); fprintf(stderr, "ZZogl-PG: ");
vfprintf(stderr, fmt, list);
vprintf(fmt, list);
va_end(list); va_end(list);
} }
void WriteLn(const char *fmt, ...)
{
va_list list;
va_start(list, fmt);
if (IsLogging()) vfprintf(gsLog, fmt, list);
fprintf(stderr, "ZZogl-PG: ");
vfprintf(stderr, fmt, list);
va_end(list);
fprintf(stderr,"\n");
}
void Greg_Log(const char *fmt, ...) void Greg_Log(const char *fmt, ...)
{ {
// Not currently used // Not currently used
@ -243,12 +257,14 @@ void Prim_Log(const char *fmt, ...)
{ {
if (IsLogging()) vfprintf(gsLog, fmt, list); if (IsLogging()) vfprintf(gsLog, fmt, list);
printf("ZZogl-PG(PRIM): "); fprintf(stderr, "ZZogl-PG(PRIM): ");
vfprintf(stderr, fmt, list);
vprintf(fmt, list); vprintf(fmt, list);
} }
va_end(list); va_end(list);
fprintf(stderr,"\n");
#endif #endif
} }
@ -265,11 +281,11 @@ void GS_Log(const char *fmt, ...)
vfprintf(gsLog, fmt, list); vfprintf(gsLog, fmt, list);
fprintf(gsLog, "\n"); fprintf(gsLog, "\n");
} }
printf("ZZogl-PG(GS): "); fprintf(stderr, "ZZogl-PG: ");
vfprintf(stderr, fmt, list);
vprintf(fmt, list); fprintf(stderr, "\n");
printf("\n");
va_end(list); va_end(list);
#endif #endif
} }
@ -287,11 +303,11 @@ void Warn_Log(const char *fmt, ...)
fprintf(gsLog, "\n"); fprintf(gsLog, "\n");
} }
printf("ZZogl-PG(Warning): "); fprintf(stderr, "ZZogl-PG: ");
vfprintf(stderr, fmt, list);
vprintf(fmt, list); fprintf(stderr, "\n");
va_end(list); va_end(list);
printf("\n");
#endif #endif
} }
@ -308,13 +324,11 @@ void Debug_Log(const char *fmt, ...)
fprintf(gsLog, "\n"); fprintf(gsLog, "\n");
} }
printf("ZZogl-PG(Debug): "); fprintf(stderr, "ZZogl-PG: ");
vfprintf(stderr, fmt, list);
vprintf(fmt, list); fprintf(stderr, "\n");
printf("\n");
va_end(list); va_end(list);
#endif #endif
} }
@ -330,10 +344,10 @@ void Error_Log(const char *fmt, ...)
fprintf(gsLog, "\n"); fprintf(gsLog, "\n");
} }
printf("ZZogl-PG(Error): "); fprintf(stderr, "ZZogl-PG: ");
vfprintf(stderr, fmt, list);
vprintf(fmt, list); fprintf(stderr, "\n");
printf("\n");
va_end(list); va_end(list);
} }
}; };
@ -488,10 +502,10 @@ s32 CALLBACK GSinit()
if (ZZLog::OpenLog() == false) if (ZZLog::OpenLog() == false)
return -1; return -1;
ZZLog::GS_Log("Calling GSinit."); ZZLog::WriteLn("Calling GSinit.");
GSreset(); GSreset();
ZZLog::GS_Log("GSinit finished."); ZZLog::WriteLn("GSinit finished.");
return 0; return 0;
} }
@ -707,7 +721,7 @@ s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread)
g_GSMultiThreaded = multithread; g_GSMultiThreaded = multithread;
ZZLog::GS_Log("Calling GSopen."); ZZLog::WriteLn("Calling GSopen.");
#ifdef _WIN32 #ifdef _WIN32
#ifdef _DEBUG #ifdef _DEBUG
@ -721,16 +735,16 @@ s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread)
err = GLWin.CreateWindow(pDsp); err = GLWin.CreateWindow(pDsp);
if (!err) if (!err)
{ {
ZZLog::GS_Log("Failed to create window. Exiting..."); ZZLog::Error_Log("Failed to create window. Exiting...");
return -1; return -1;
} }
ZZLog::Error_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor); ZZLog::GS_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor);
ZZLog::Error_Log("Creating ZZOgl window."); ZZLog::WriteLn("Creating ZZOgl window.");
if (!ZeroGS::Create(conf.width, conf.height)) return -1; if (!ZeroGS::Create(conf.width, conf.height)) return -1;
ZZLog::Error_Log("Initialization successful."); ZZLog::WriteLn("Initialization successful.");
switch (conf.bilinear) switch (conf.bilinear)
{ {

View File

@ -506,7 +506,7 @@ void CALLBACK GSgifTransfer1(u32 *pMem, u32 addr)
{ {
assert((addr&0xf) == 0); //BUG assert((addr&0xf) == 0); //BUG
path->nloop = 0; path->nloop = 0;
ZZLog::Error_Log("Transfer1 - 2."); ZZLog::Debug_Log("Transfer1 - 2.");
return; return;
} }
} }

View File

@ -374,7 +374,10 @@ __forceinline void testWrite(int i, u32 *data)
// test.ztst = (data[0] >> 17) & 0x3; // test.ztst = (data[0] >> 17) & 0x3;
} }
__forceinline void clampWrite(int i, u32 *data) #ifndef __LINUX__
__forceinline
#endif
void clampWrite(int i, u32 *data)
{ {
FUNCLOG FUNCLOG
clampInfo& clamp = ZeroGS::vb[i].clamp; clampInfo& clamp = ZeroGS::vb[i].clamp;

View File

@ -209,8 +209,8 @@ typedef struct
bool isWideScreen; // Widescreen support bool isWideScreen; // Widescreen support
u32 log; u32 log;
void incAA() { aa++; if (aa > 4) aa = 4; } void incAA() { aa++; if (aa > 4) aa = 0; }
void decAA() { aa--; if (aa > 4) aa = 0; } // u8 is unsigned, so negative value is 255. void decAA() { aa--; if (aa > 4) aa = 4; } // u8 is unsigned, so negative value is 255.
gameHacks settings() gameHacks settings()
{ {
@ -388,6 +388,7 @@ extern void Message(const char *fmt, ...);
extern void Log(const char *fmt, ...); extern void Log(const char *fmt, ...);
extern void WriteToConsole(const char *fmt, ...); extern void WriteToConsole(const char *fmt, ...);
extern void Print(const char *fmt, ...); extern void Print(const char *fmt, ...);
extern void WriteLn(const char *fmt, ...);
extern void Greg_Log(const char *fmt, ...); extern void Greg_Log(const char *fmt, ...);
extern void Prim_Log(const char *fmt, ...); extern void Prim_Log(const char *fmt, ...);

View File

@ -435,7 +435,7 @@ inline void RenderUpdateStencil(int i, bool* bUsingStencil)
// CRTC24 could not be rendered // CRTC24 could not be rendered
inline void RenderCRTC24helper(u32 bInterlace, int interlace, int psm) inline void RenderCRTC24helper(u32 bInterlace, int interlace, int psm)
{ {
ZZLog::Error_Log("ZZogl: CRTC24!!! I'm trying to show something."); ZZLog::Debug_Log("ZZogl: CRTC24!!! I'm trying to show something.");
SetShaderCaller("RenderCRTC24helper"); SetShaderCaller("RenderCRTC24helper");
// assume that data is already in ptexMem (do Resolve?) // assume that data is already in ptexMem (do Resolve?)
RenderGetForClip(bInterlace, interlace, psm, &ppsCRTC24[bInterlace]); RenderGetForClip(bInterlace, interlace, psm, &ppsCRTC24[bInterlace]);

View File

@ -653,7 +653,7 @@ bool ZeroGS::Create(int _width, int _height)
return false; return false;
} }
ZZLog::Error_Log("Using non-bilinear fill."); ZZLog::GS_Log("Using non-bilinear fill.");
} }
else else
{ {
@ -667,7 +667,7 @@ bool ZeroGS::Create(int _width, int _height)
g_internalRGBAFloatFmt = GL_FLOAT_RGBA32_NV; g_internalRGBAFloatFmt = GL_FLOAT_RGBA32_NV;
g_internalRGBAFloat16Fmt = GL_FLOAT_RGBA16_NV; g_internalRGBAFloat16Fmt = GL_FLOAT_RGBA16_NV;
Texture2D(g_internalRGBAFloatFmt, GL_RGBA, GL_FLOAT, &vBilinearData[0]); Texture2D(g_internalRGBAFloatFmt, GL_RGBA, GL_FLOAT, &vBilinearData[0]);
ZZLog::Error_Log("ZZogl Fill bilinear blocks."); ZZLog::Debug_Log("ZZogl Fill bilinear blocks. ");
B_G(glGetError() == GL_NO_ERROR, return false); B_G(glGetError() == GL_NO_ERROR, return false);
} }
else else
@ -807,7 +807,7 @@ bool ZeroGS::Create(int _width, int _height)
g_vparamPosXY[0] = cgCreateParameter(g_cgcontext, CG_FLOAT4); g_vparamPosXY[0] = cgCreateParameter(g_cgcontext, CG_FLOAT4);
g_vparamPosXY[1] = cgCreateParameter(g_cgcontext, CG_FLOAT4); g_vparamPosXY[1] = cgCreateParameter(g_cgcontext, CG_FLOAT4);
ZZLog::Error_Log("Creating effects."); ZZLog::GS_Log("Creating effects.");
B_G(LoadEffects(), return false); B_G(LoadEffects(), return false);
@ -849,11 +849,11 @@ bool ZeroGS::Create(int _width, int _height)
if (g_nPixelShaderVer & SHADER_REDUCED) conf.bilinear = 0; if (g_nPixelShaderVer & SHADER_REDUCED) conf.bilinear = 0;
ZZLog::Error_Log("Creating extra effects."); ZZLog::GS_Log("Creating extra effects.");
B_G(LoadExtraEffects(), return false); B_G(LoadExtraEffects(), return false);
ZZLog::Error_Log("Using %s shaders.", g_pShaders[g_nPixelShaderVer]); ZZLog::GS_Log("Using %s shaders.", g_pShaders[g_nPixelShaderVer]);
GL_REPORT_ERROR(); GL_REPORT_ERROR();
@ -892,7 +892,7 @@ bool ZeroGS::Create(int _width, int _height)
} }
else else
{ {
ZZLog::Error_Log("In final init!"); ZZLog::Debug_Log("In final init!");
return false; return false;
} }
} }

View File

@ -315,13 +315,13 @@ inline void VisualBufferMessage(int context)
static const char* patst[8] = { "NEVER", "ALWAYS", "LESS", "LEQUAL", "EQUAL", "GEQUAL", "GREATER", "NOTEQUAL"}; static const char* patst[8] = { "NEVER", "ALWAYS", "LESS", "LEQUAL", "EQUAL", "GEQUAL", "GREATER", "NOTEQUAL"};
static const char* pztst[4] = { "NEVER", "ALWAYS", "GEQUAL", "GREATER" }; static const char* pztst[4] = { "NEVER", "ALWAYS", "GEQUAL", "GREATER" };
static const char* pafail[4] = { "KEEP", "FB_ONLY", "ZB_ONLY", "RGB_ONLY" }; static const char* pafail[4] = { "KEEP", "FB_ONLY", "ZB_ONLY", "RGB_ONLY" };
ZZLog::Error_Log("**Drawing ctx %d, num %d, fbp: 0x%x, zbp: 0x%x, fpsm: %d, zpsm: %d, fbw: %d", context, vb[context].nCount, curvb.prndr->fbp, curvb.zbuf.zbp, curvb.prndr->psm, curvb.zbuf.psm, curvb.prndr->fbw); ZZLog::Debug_Log("**Drawing ctx %d, num %d, fbp: 0x%x, zbp: 0x%x, fpsm: %d, zpsm: %d, fbw: %d", context, vb[context].nCount, curvb.prndr->fbp, curvb.zbuf.zbp, curvb.prndr->psm, curvb.zbuf.psm, curvb.prndr->fbw);
ZZLog::Error_Log("prim: prim=%x iip=%x tme=%x fge=%x abe=%x aa1=%x fst=%x ctxt=%x fix=%x", ZZLog::Debug_Log("prim: prim=%x iip=%x tme=%x fge=%x abe=%x aa1=%x fst=%x ctxt=%x fix=%x",
curvb.curprim.prim, curvb.curprim.iip, curvb.curprim.tme, curvb.curprim.fge, curvb.curprim.abe, curvb.curprim.aa1, curvb.curprim.fst, curvb.curprim.ctxt, curvb.curprim.fix); curvb.curprim.prim, curvb.curprim.iip, curvb.curprim.tme, curvb.curprim.fge, curvb.curprim.abe, curvb.curprim.aa1, curvb.curprim.fst, curvb.curprim.ctxt, curvb.curprim.fix);
ZZLog::Error_Log("test: ate:%d, atst: %s, aref: %d, afail: %s, date: %d, datm: %d, zte: %d, ztst: %s, fba: %d", ZZLog::Debug_Log("test: ate:%d, atst: %s, aref: %d, afail: %s, date: %d, datm: %d, zte: %d, ztst: %s, fba: %d",
curvb.test.ate, patst[curvb.test.atst], curvb.test.aref, pafail[curvb.test.afail], curvb.test.date, curvb.test.datm, curvb.test.zte, pztst[curvb.test.ztst], curvb.fba.fba); curvb.test.ate, patst[curvb.test.atst], curvb.test.aref, pafail[curvb.test.afail], curvb.test.date, curvb.test.datm, curvb.test.zte, pztst[curvb.test.ztst], curvb.fba.fba);
ZZLog::Error_Log("alpha: A%d B%d C%d D%d FIX:%d pabe: %d; aem: %d, ta0: %d, ta1: %d\n", curvb.alpha.a, curvb.alpha.b, curvb.alpha.c, curvb.alpha.d, curvb.alpha.fix, gs.pabe, gs.texa.aem, gs.texa.ta[0], gs.texa.ta[1]); ZZLog::Debug_Log("alpha: A%d B%d C%d D%d FIX:%d pabe: %d; aem: %d, ta0: %d, ta1: %d\n", curvb.alpha.a, curvb.alpha.b, curvb.alpha.c, curvb.alpha.d, curvb.alpha.fix, gs.pabe, gs.texa.aem, gs.texa.ta[0], gs.texa.ta[1]);
ZZLog::Error_Log("tex0: tbp0=0x%x, tbw=%d, psm=0x%x, tw=%d, th=%d, tcc=%d, tfx=%d, cbp=0x%x, cpsm=0x%x, csm=%d, csa=%d, cld=%d", ZZLog::Debug_Log("tex0: tbp0=0x%x, tbw=%d, psm=0x%x, tw=%d, th=%d, tcc=%d, tfx=%d, cbp=0x%x, cpsm=0x%x, csm=%d, csa=%d, cld=%d",
curvb.tex0.tbp0, curvb.tex0.tbw, curvb.tex0.psm, curvb.tex0.tw, curvb.tex0.tbp0, curvb.tex0.tbw, curvb.tex0.psm, curvb.tex0.tw,
curvb.tex0.th, curvb.tex0.tcc, curvb.tex0.tfx, curvb.tex0.cbp, curvb.tex0.th, curvb.tex0.tcc, curvb.tex0.tfx, curvb.tex0.cbp,
curvb.tex0.cpsm, curvb.tex0.csm, curvb.tex0.csa, curvb.tex0.cld); curvb.tex0.cpsm, curvb.tex0.csm, curvb.tex0.csa, curvb.tex0.cld);
@ -334,7 +334,7 @@ inline void VisualBufferMessage(int context)
ZZLog::Error_Log("TGA name '%s'.", Name); ZZLog::Error_Log("TGA name '%s'.", Name);
free(Name); free(Name);
// } // }
ZZLog::Error_Log("frame: %d, buffer %ld.\n", g_SaveFrameNum, BufferNumber); ZZLog::Debug_Log("frame: %d, buffer %ld.\n", g_SaveFrameNum, BufferNumber);
#endif #endif
} }
@ -345,7 +345,7 @@ inline void SaveRendererTarget(VB& curvb)
if (g_bSaveFlushedFrame & 0x80000000) if (g_bSaveFlushedFrame & 0x80000000)
{ {
char str[255]; char str[255];
sprintf(str, "rndr.tga", g_SaveFrameNum); sprintf(str, "rndr%d.tga", g_SaveFrameNum);
SaveRenderTarget(str, curvb.prndr->fbw, curvb.prndr->fbh, 0); SaveRenderTarget(str, curvb.prndr->fbw, curvb.prndr->fbh, 0);
} }

View File

@ -252,7 +252,7 @@ inline int ZeroGS::VB::CheckFrameAddConstraints(int tbp)
#ifdef DEVBUILD #ifdef DEVBUILD
if (frame.fbh == 0xe2) if (frame.fbh == 0xe2)
ZZLog::Error_Log("Const: %x %x %d| %x %d %x %x", frame.fbh, frame.fbw, ConstraintReason, noscissorpos, ConstrainR1, tbp, frame.fbp); ZZLog::Debug_Log("Const: %x %x %d| %x %d %x %x", frame.fbh, frame.fbw, ConstraintReason, noscissorpos, ConstrainR1, tbp, frame.fbp);
#endif #endif
// Fixme: Reserved psm for framebuffers // Fixme: Reserved psm for framebuffers

View File

@ -430,13 +430,13 @@ void ZeroGS::CRenderTarget::Update(int context, ZeroGS::CRenderTarget* pdepth)
nUpdateTarg = 0; nUpdateTarg = 0;
else if (ittarg->second == this) else if (ittarg->second == this)
{ {
ZZLog::Error_Log("Updating self."); ZZLog::Debug_Log("Updating self.");
nUpdateTarg = 0; nUpdateTarg = 0;
} }
} }
else if (ittarg->second == this) else if (ittarg->second == this)
{ {
ZZLog::Error_Log("Updating self."); ZZLog::Debug_Log("Updating self.");
nUpdateTarg = 0; nUpdateTarg = 0;
} }
} }
@ -2790,7 +2790,7 @@ void ResolveInRange(int start, int end)
if ((*it)->created == 123) if ((*it)->created == 123)
(*it)->Resolve(); (*it)->Resolve();
else else
ZZLog::Error_Log("Resolving non-existing object! Destroy code %d.", (*it)->created); ZZLog::Debug_Log("Resolving non-existing object! Destroy code %d.", (*it)->created);
} }
} }
} }

View File

@ -462,7 +462,7 @@ End:
"test edx, 15\n" "test edx, 15\n"
"jnz WriteUnaligned\n" "jnz WriteUnaligned\n"
"movdqa xmm7, [%[s_clut16mask]]\n" // saves upper 16 bits "movdqa xmm7, [s_clut16mask]\n" // saves upper 16 bits
// have to save interlaced with the old data // have to save interlaced with the old data
"movdqa xmm4, [edx]\n" "movdqa xmm4, [edx]\n"
@ -503,7 +503,7 @@ End:
// %edx is offset by 2 // %edx is offset by 2
"sub edx, 2\n" "sub edx, 2\n"
"movdqa xmm7, [%[s_clut16mask2]]\n" // saves lower 16 bits "movdqa xmm7, [[s_clut16mask2]]\n" // saves lower 16 bits
// have to save interlaced with the old data // have to save interlaced with the old data
"movdqa xmm4, [edx]\n" "movdqa xmm4, [edx]\n"
@ -543,9 +543,8 @@ End:
"movdqa [edx+16], xmm2\n" "movdqa [edx+16], xmm2\n"
"movdqa [edx+48], xmm3\n" "movdqa [edx+48], xmm3\n"
"WriteCLUT_T16_I4_CSM1_End:\n" "WriteCLUT_T16_I4_CSM1_End:\n"
".att_syntax\n" "\n"
".att_syntax\n" : [s_clut16mask] "=m" (s_clut16mask), [s_clut16mask2] "=m" (s_clut16mask2)
: [s_clut16mask]"=m"(s_clut16mask), [s_clut16mask2]"=m"(s_clut16mask2)
); );
#endif // _MSC_VER #endif // _MSC_VER
} }

View File

@ -595,7 +595,11 @@ __forceinline void MOVFOG(VertexGPU *p, Vertex gsf)
int Values[100] = {0, }; int Values[100] = {0, };
__forceinline void SET_VERTEX(VertexGPU *p, int Index, const VB& curvb)
#ifndef __LINUX__
__forceinline
#endif
void SET_VERTEX(VertexGPU *p, int Index, const VB& curvb)
{ {
int index = Index; int index = Index;
p->x = ((((int)gs.gsvertex[index].x - curvb.offset.x) >> 1) & 0xffff); p->x = ((((int)gs.gsvertex[index].x - curvb.offset.x) >> 1) & 0xffff);
@ -767,7 +771,10 @@ void ZeroGS::KickTriangleFan()
OUTPUT_VERT(p[2], 2); OUTPUT_VERT(p[2], 2);
} }
__forceinline void SetKickVertex(VertexGPU *p, Vertex v, int next, const VB& curvb) #ifndef __LINUX__
__forceinline
#endif
void SetKickVertex(VertexGPU *p, Vertex v, int next, const VB& curvb)
{ {
SET_VERTEX(p, next, curvb); SET_VERTEX(p, next, curvb);
MOVZ(p, v.z, curvb); MOVZ(p, v.z, curvb);