From 2d754b3ca0f32ed18ff2c4fc3bcde7b52ef7d3c0 Mon Sep 17 00:00:00 2001 From: arcum42 Date: Fri, 26 Mar 2010 05:17:14 +0000 Subject: [PATCH] zzogl-pg: Use SSE2 by default in the codeblock project. Move the swizzle stuff about a bit. A few changes I had sitting around. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2771 96395faa-99c1-11dd-bbfe-3dabce05a288 --- .../opengl/Linux/zzogl-pg/zzogl-pg.cbp | 2 + plugins/zzogl-pg/opengl/Mem_Swizzle.h | 193 +++--------------- .../opengl/Win32/zerogsogl_2008.vcproj | 4 + plugins/zzogl-pg/opengl/ZZoglShaders.cpp | 148 ++++---------- plugins/zzogl-pg/opengl/x86.cpp | 72 ------- plugins/zzogl-pg/opengl/x86.h | 4 +- plugins/zzogl-pg/opengl/zerogs.h | 61 ++++++ 7 files changed, 135 insertions(+), 349 deletions(-) diff --git a/plugins/zzogl-pg/opengl/Linux/zzogl-pg/zzogl-pg.cbp b/plugins/zzogl-pg/opengl/Linux/zzogl-pg/zzogl-pg.cbp index d4612a1fca..97cfe70351 100644 --- a/plugins/zzogl-pg/opengl/Linux/zzogl-pg/zzogl-pg.cbp +++ b/plugins/zzogl-pg/opengl/Linux/zzogl-pg/zzogl-pg.cbp @@ -39,6 +39,7 @@ + @@ -80,6 +81,7 @@ + diff --git a/plugins/zzogl-pg/opengl/Mem_Swizzle.h b/plugins/zzogl-pg/opengl/Mem_Swizzle.h index 3c22e4c960..fc7952e37e 100644 --- a/plugins/zzogl-pg/opengl/Mem_Swizzle.h +++ b/plugins/zzogl-pg/opengl/Mem_Swizzle.h @@ -20,175 +20,32 @@ #define MEM_SWIZZLE_H_INCLUDED #include "GS.h" -#include "Mem.h" - +#include "Mem.h" +#include "x86.h" + +extern __forceinline void SwizzleBlock32(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock16(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock8(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock4(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock32u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock16u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock8u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock4u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); + +extern __forceinline void __fastcall SwizzleBlock32_c(u8* dst, u8* src, int srcpitch, u32 WriteMask = 0xffffffff); +extern __forceinline void __fastcall SwizzleBlock24_c(u8* dst, u8* src, int srcpitch, u32 WriteMask = 0xffffffff); +extern __forceinline void __fastcall SwizzleBlock16_c(u8* dst, u8* src, int srcpitch, u32 WriteMask = 0xffffffff); +extern __forceinline void __fastcall SwizzleBlock8_c(u8* dst, u8* src, int srcpitch, u32 WriteMask = 0xffffffff); +extern __forceinline void __fastcall SwizzleBlock4_c(u8* dst, u8* src, int srcpitch, u32 WriteMask = 0xffffffff); + // special swizzle macros - which I converted to functions. -#ifdef ZEROGS_SSE2 - -static __forceinline void SwizzleBlock32(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock32_sse2(dst, src, pitch, WriteMask); -} - -static __forceinline void SwizzleBlock16(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock16_sse2(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock8(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock8_sse2(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock4(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock4_sse2(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock32u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock32u_sse2(dst, src, pitch, WriteMask); -} -static __forceinline void SwizzleBlock16u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock16u_sse2(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock8u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock8u_sse2(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock4u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock4u_sse2(dst, src, pitch/*, WriteMask*/); -} -#else - -static __forceinline void SwizzleBlock32(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock32_c(dst, src, pitch, WriteMask); -} - -static __forceinline void SwizzleBlock16(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock16_c(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock8(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock8_c(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock4(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock4_c(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock32u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock32_c(dst, src, pitch, WriteMask); -} -static __forceinline void SwizzleBlock16u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock16_c(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock8u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock8_c(dst, src, pitch/*, WriteMask*/); -} -static __forceinline void SwizzleBlock4u(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - SwizzleBlock4_c(dst, src, pitch/*, WriteMask*/); -} - -#endif -static __forceinline void SwizzleBlock24(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - for(int by = 0; by < 7; ++by, pblock += 8, pnewsrc += pitch-24) - { - for(int bx = 0; bx < 8; ++bx, pnewsrc += 3) - { - pblock[bx] = *(u32*)pnewsrc; - } - } - - for(int bx = 0; bx < 7; ++bx, pnewsrc += 3) - { - /* might be 1 byte out of bounds of GS memory */ - pblock[bx] = *(u32*)pnewsrc; - } - - /* do 3 bytes for the last copy */ - *((u8*)pblock+28) = pnewsrc[0]; - *((u8*)pblock+29) = pnewsrc[1]; - *((u8*)pblock+30) = pnewsrc[2]; - SwizzleBlock32((u8*)dst, (u8*)tempblock, 32, 0x00ffffff); -} - -#define SwizzleBlock24u SwizzleBlock24 - -static __forceinline void SwizzleBlock8H(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - for(int by = 0; by < 8; ++by, pblock += 8, pnewsrc += pitch) - { - u32 u = *(u32*)pnewsrc; - pblock[0] = u<<24; - pblock[1] = u<<16; - pblock[2] = u<<8; - pblock[3] = u; - u = *(u32*)(pnewsrc+4); - pblock[4] = u<<24; - pblock[5] = u<<16; - pblock[6] = u<<8; - pblock[7] = u; - } - SwizzleBlock32((u8*)dst, (u8*)tempblock, 32, 0xff000000); -} - -#define SwizzleBlock8Hu SwizzleBlock8H - -static __forceinline void SwizzleBlock4HH(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - for(int by = 0; by < 8; ++by, pblock += 8, pnewsrc += pitch) - { - u32 u = *(u32*)pnewsrc; - pblock[0] = u<<28; - pblock[1] = u<<24; - pblock[2] = u<<20; - pblock[3] = u<<16; - pblock[4] = u<<12; - pblock[5] = u<<8; - pblock[6] = u<<4; - pblock[7] = u; - } - SwizzleBlock32((u8*)dst, (u8*)tempblock, 32, 0xf0000000); -} - -#define SwizzleBlock4HHu SwizzleBlock4HH - -static __forceinline void SwizzleBlock4HL(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - for(int by = 0; by < 8; ++by, pblock += 8, pnewsrc += pitch) - { - u32 u = *(u32*)pnewsrc; - pblock[0] = u<<24; - pblock[1] = u<<20; - pblock[2] = u<<16; - pblock[3] = u<<12; - pblock[4] = u<<8; - pblock[5] = u<<4; - pblock[6] = u; - pblock[7] = u>>4; - } - SwizzleBlock32((u8*)dst, (u8*)tempblock, 32, 0x0f000000); -} - +extern __forceinline void SwizzleBlock24(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock8H(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock4HH(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +extern __forceinline void SwizzleBlock4HL(u8 *dst, u8 *src, int pitch, u32 WriteMask = 0xffffffff); +#define SwizzleBlock24u SwizzleBlock24 +#define SwizzleBlock8Hu SwizzleBlock8H +#define SwizzleBlock4HHu SwizzleBlock4HH #define SwizzleBlock4HLu SwizzleBlock4HL - #endif // MEM_SWIZZLE_H_INCLUDED diff --git a/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.vcproj b/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.vcproj index 23de8041dd..8ef4c7f73a 100644 --- a/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.vcproj +++ b/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.vcproj @@ -327,6 +327,10 @@ RelativePath="..\Mem_Tables.cpp" > + + diff --git a/plugins/zzogl-pg/opengl/ZZoglShaders.cpp b/plugins/zzogl-pg/opengl/ZZoglShaders.cpp index 9e20627a19..28f887d5f1 100644 --- a/plugins/zzogl-pg/opengl/ZZoglShaders.cpp +++ b/plugins/zzogl-pg/opengl/ZZoglShaders.cpp @@ -50,126 +50,58 @@ void HandleCgError(CGcontext ctx, CGerror err, void* appdata) DEBUG_LOG(" last listing: %s\n", listing); } -// This is helper of cgGLSetParameter4fv, made for debug purpose. -// Name could be any string. We must use it on compilation time, because erroneus handler does not -// return name -void ZZcgSetParameter4fv(CGparameter param, const float* v, const char* name) { +// This is a helper of cgGLSetParameter4fv, made for debugging purposes. +// The name could be any string. We must use it on compilation time, because the erronious handler does not +// return it. +void ZZcgSetParameter4fv(CGparameter param, const float* v, const char* name) +{ ShaderHandleName = name; cgGLSetParameter4fv(param, v); } -#define SET_UNIFORMPARAM(var, name) { \ - p = cgGetNamedParameter(pf->prog, name); \ - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) \ - pf->var = p; \ -} \ - void SetupFragmentProgramParameters(FRAGMENTSHADER* pf, int context, int type) { // uniform parameters - CGparameter p; + pf->connect(g_fparamFogColor, "g_fFogColor"); - p = cgGetNamedParameter(pf->prog, "g_fFogColor"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgConnectParameter(g_fparamFogColor, p); - } - - SET_UNIFORMPARAM(sOneColor, "g_fOneColor"); - SET_UNIFORMPARAM(sBitBltZ, "g_fBitBltZ"); - SET_UNIFORMPARAM(sInvTexDims, "g_fInvTexDims"); - SET_UNIFORMPARAM(fTexAlpha2, "fTexAlpha2"); - SET_UNIFORMPARAM(fTexOffset, "g_fTexOffset"); - SET_UNIFORMPARAM(fTexDims, "g_fTexDims"); - SET_UNIFORMPARAM(fTexBlock, "g_fTexBlock"); - SET_UNIFORMPARAM(fClampExts, "g_fClampExts"); - SET_UNIFORMPARAM(fTexWrapMode, "TexWrapMode"); - SET_UNIFORMPARAM(fRealTexDims, "g_fRealTexDims"); - SET_UNIFORMPARAM(fTestBlack, "g_fTestBlack"); - SET_UNIFORMPARAM(fPageOffset, "g_fPageOffset"); - SET_UNIFORMPARAM(fTexAlpha, "fTexAlpha"); + pf->set_uniform_param(pf->sOneColor, "g_fOneColor"); + pf->set_uniform_param(pf->sBitBltZ, "g_fBitBltZ"); + pf->set_uniform_param(pf->sInvTexDims, "g_fInvTexDims"); + pf->set_uniform_param(pf->fTexAlpha2, "fTexAlpha2"); + pf->set_uniform_param(pf->fTexOffset, "g_fTexOffset"); + pf->set_uniform_param(pf->fTexDims, "g_fTexDims"); + pf->set_uniform_param(pf->fTexBlock, "g_fTexBlock"); + pf->set_uniform_param(pf->fClampExts, "g_fClampExts"); + pf->set_uniform_param(pf->fTexWrapMode, "TexWrapMode"); + pf->set_uniform_param(pf->fRealTexDims, "g_fRealTexDims"); + pf->set_uniform_param(pf->fTestBlack, "g_fTestBlack"); + pf->set_uniform_param(pf->fPageOffset, "g_fPageOffset"); + pf->set_uniform_param(pf->fTexAlpha, "fTexAlpha"); // textures - p = cgGetNamedParameter(pf->prog, "g_sBlocks"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexBlocks); - cgGLEnableTextureParameter(p); - } + pf->set_texture(ptexBlocks, "g_sBlocks"); // cg parameter usage is wrong, so do it manually - if( type == 3 ) { - p = cgGetNamedParameter(pf->prog, "g_sConv16to32"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexConv16to32); - cgGLEnableTextureParameter(p); - } - } - else if( type == 4 ) { - p = cgGetNamedParameter(pf->prog, "g_sConv32to16"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexConv32to16); - cgGLEnableTextureParameter(p); - } - } - else { - p = cgGetNamedParameter(pf->prog, "g_sBilinearBlocks"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexBilinearBlocks); - cgGLEnableTextureParameter(p); - } + switch(type) + { + case 3: pf->set_texture(ptexConv16to32, "g_sConv16to32"); break; + case 4: pf->set_texture(ptexConv32to16, "g_sConv32to16"); break; + default: pf->set_texture(ptexBilinearBlocks, "g_sBilinearBlocks"); break; } - p = cgGetNamedParameter(pf->prog, "g_sMemory"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sMemory = p; - } - p = cgGetNamedParameter(pf->prog, "g_sSrcFinal"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sFinal = p; - } - p = cgGetNamedParameter(pf->prog, "g_sBitwiseANDX"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sBitwiseANDX = p; - } - p = cgGetNamedParameter(pf->prog, "g_sBitwiseANDY"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sBitwiseANDY = p; - } - p = cgGetNamedParameter(pf->prog, "g_sCLUT"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sCLUT = p; - } - p = cgGetNamedParameter(pf->prog, "g_sInterlace"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sInterlace = p; - } + pf->set_texture(pf->sMemory, "g_sMemory"); + pf->set_texture(pf->sFinal, "g_sSrcFinal"); + pf->set_texture(pf->sBitwiseANDX, "g_sBitwiseANDX"); + pf->set_texture(pf->sBitwiseANDY, "g_sBitwiseANDY"); + pf->set_texture(pf->sCLUT, "g_sCLUT"); + pf->set_texture(pf->sInterlace, "g_sInterlace"); // set global shader constants - p = cgGetNamedParameter(pf->prog, "g_fExactColor"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetParameter4fv(p, Vector(0.5f, (g_GameSettings&GAME_EXACTCOLOR)?0.9f/256.0f:0.5f/256.0f, 0,1/255.0f)); - } - - p = cgGetNamedParameter(pf->prog, "g_fBilinear"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, Vector(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f )); - - p = cgGetNamedParameter(pf->prog, "g_fZBias"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, Vector(1.0f/256.0f, 1.0004f, 1, 0.5f)); - - p = cgGetNamedParameter(pf->prog, "g_fc0"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, Vector(0,1, 0.001f, 0.5f)); - - p = cgGetNamedParameter(pf->prog, "g_fMult"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, Vector(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f)); + pf->set_shader_const(Vector(0.5f, (g_GameSettings&GAME_EXACTCOLOR)?0.9f/256.0f:0.5f/256.0f, 0,1/255.0f), "g_fExactColor"); + pf->set_shader_const(Vector(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f ), "g_fBilinear"); + pf->set_shader_const(Vector(1.0f/256.0f, 1.0004f, 1, 0.5f), "g_fZBias"); + pf->set_shader_const(Vector(0,1, 0.001f, 0.5f), "g_fc0"); + pf->set_shader_const(Vector(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f), "g_fMult"); } void SetupVertexProgramParameters(CGprogram prog, int context) @@ -181,11 +113,13 @@ void SetupVertexProgramParameters(CGprogram prog, int context) cgConnectParameter(g_vparamPosXY[context], p); // Set Z-test, log or no log; - if (g_GameSettings&GAME_NOLOGZ) { - g_vdepth = Vector( 255.0 /256.0f, 255.0/65536.0f, 255.0f/(65535.0f*256.0f), 1.0f/(65536.0f*65536.0f)); + if (g_GameSettings&GAME_NOLOGZ) + { + g_vdepth = Vector( 255.0 /256.0f, 255.0/65536.0f, 255.0f/(65535.0f*256.0f), 1.0f/(65536.0f*65536.0f)); vlogz = Vector( 1.0f, 0.0f, 0.0f, 0.0f); } - else { + else + { g_vdepth = Vector( 256.0f*65536.0f, 65536.0f, 256.0f, 65536.0f*65536.0f); vlogz = Vector( 0.0f, 1.0f, 0.0f, 0.0f); } diff --git a/plugins/zzogl-pg/opengl/x86.cpp b/plugins/zzogl-pg/opengl/x86.cpp index fd21b0734a..f4220dfb5f 100644 --- a/plugins/zzogl-pg/opengl/x86.cpp +++ b/plugins/zzogl-pg/opengl/x86.cpp @@ -29,78 +29,6 @@ #endif // swizzling - -void __fastcall SwizzleBlock32_c(u8* dst, u8* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if(WriteMask == 0xffffffff) - { - for(int j = 0; j < 8; j++, d += 8, src += srcpitch) - for(int i = 0; i < 8; i++) - ((u32*)dst)[d[i]] = ((u32*)src)[i]; - } - else - { - for(int j = 0; j < 8; j++, d += 8, src += srcpitch) - for(int i = 0; i < 8; i++) - ((u32*)dst)[d[i]] = (((u32*)dst)[d[i]] & ~WriteMask) | (((u32*)src)[i] & WriteMask); - } -} - - -void __fastcall SwizzleBlock24_c(u8* dst, u8* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if(WriteMask == 0x00ffffff) - { - for(int j = 0; j < 8; j++, d += 8, src += srcpitch) - for(int i = 0; i < 8; i++) - ((u32*)dst)[d[i]] = ((u32*)src)[i]; - } - else - { - for(int j = 0; j < 8; j++, d += 8, src += srcpitch) - for(int i = 0; i < 8; i++) - ((u32*)dst)[d[i]] = (((u32*)dst)[d[i]] & ~WriteMask) | (((u32*)src)[i] & WriteMask); - } -} - -void __fastcall SwizzleBlock16_c(u8* dst, u8* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - for(int j = 0; j < 8; j++, d += 16, src += srcpitch) - for(int i = 0; i < 16; i++) - ((u16*)dst)[d[i]] = ((u16*)src)[i]; -} - -void __fastcall SwizzleBlock8_c(u8* dst, u8* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable8[0][0]; - - for(int j = 0; j < 16; j++, d += 16, src += srcpitch) - for(int i = 0; i < 16; i++) - dst[d[i]] = src[i]; -} - -void __fastcall SwizzleBlock4_c(u8* dst, u8* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable4[0][0]; - - for(int j = 0; j < 16; j++, d += 32, src += srcpitch) - { - for(int i = 0; i < 32; i++) - { - u32 addr = d[i]; - u8 c = (src[i>>1] >> ((i&1) << 2)) & 0x0f; - u32 shift = (addr&1) << 2; - dst[addr >> 1] = (dst[addr >> 1] & (0xf0 >> shift)) | (c << shift); - } - } -} - #define _FrameSwizzleBlock(type, transfer, transfer16, incsrc) \ /* FrameSwizzleBlock32 */ \ void __fastcall FrameSwizzleBlock32##type##c(u32* dst, u32* src, int srcpitch, u32 WriteMask) \ diff --git a/plugins/zzogl-pg/opengl/x86.h b/plugins/zzogl-pg/opengl/x86.h index ce26a79aeb..b7f3b29d84 100644 --- a/plugins/zzogl-pg/opengl/x86.h +++ b/plugins/zzogl-pg/opengl/x86.h @@ -59,10 +59,10 @@ extern "C" void __fastcall Frame16SwizzleBlock32ZA4_sse2(u32* dst, Vector_16F* s extern "C" void __fastcall Frame16SwizzleBlock16A4_sse2(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask); extern "C" void __fastcall Frame16SwizzleBlock16ZA4_sse2(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask); -extern void __fastcall SwizzleBlock32_c(u8* dst, u8* src, int srcpitch, u32 WriteMask = 0xffffffff); +/*extern void __fastcall SwizzleBlock32_c(u8* dst, u8* src, int srcpitch, u32 WriteMask = 0xffffffff); extern void __fastcall SwizzleBlock16_c(u8* dst, u8* src, int srcpitch); extern void __fastcall SwizzleBlock8_c(u8* dst, u8* src, int srcpitch); -extern void __fastcall SwizzleBlock4_c(u8* dst, u8* src, int srcpitch); +extern void __fastcall SwizzleBlock4_c(u8* dst, u8* src, int srcpitch);*/ // no AA extern void __fastcall FrameSwizzleBlock32_c(u32* dst, u32* src, int srcpitch, u32 WriteMask); diff --git a/plugins/zzogl-pg/opengl/zerogs.h b/plugins/zzogl-pg/opengl/zerogs.h index f8918625e8..5ab6d5a65c 100644 --- a/plugins/zzogl-pg/opengl/zerogs.h +++ b/plugins/zzogl-pg/opengl/zerogs.h @@ -271,6 +271,67 @@ struct FRAGMENTSHADER #ifdef _DEBUG string filename; #endif + void set_uniform_param(CGparameter &var, const char *name) + { + CGparameter p; + p = cgGetNamedParameter(prog, name); + if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) var = p; + } + + bool set_texture(GLuint texobj, const char *name) + { + CGparameter p; + + p = cgGetNamedParameter(prog, name); + if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) + { + cgGLSetTextureParameter(p, texobj); + cgGLEnableTextureParameter(p); + return true; + } + return false; + } + + bool connect(CGparameter &tex, const char *name) + { + CGparameter p; + + p = cgGetNamedParameter(prog, name); + if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) + { + cgConnectParameter(tex, p); + return true; + } + return false; + } + + bool set_texture(CGparameter &tex, const char *name) + { + CGparameter p; + + p = cgGetNamedParameter(prog, name); + if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) + { + //cgGLEnableTextureParameter(p); + tex = p; + return true; + } + return false; + } + + bool set_shader_const(Vector v, const char *name) + { + CGparameter p; + + p = cgGetNamedParameter(prog, name); + + if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) + { + cgGLSetParameter4fv(p, v); + return true; + } + return false; + } }; struct VERTEXSHADER