From 4750e10076909e0347909a653d95f051e79f58b5 Mon Sep 17 00:00:00 2001 From: gizmo98 Date: Thu, 31 May 2018 11:59:44 +0200 Subject: [PATCH] Use _FIXED2FLOATCOLOR --- src/GBI.h | 1 + .../glsl_CombinerProgramUniformFactory.cpp | 4 +- src/gDP.cpp | 70 +++++++++---------- src/gSP.cpp | 30 ++++---- src/uCodes/ZSort.cpp | 20 +++--- src/uCodes/ZSortBOSS.cpp | 14 ++-- 6 files changed, 70 insertions(+), 69 deletions(-) diff --git a/src/GBI.h b/src/GBI.h index 0d3fa6e30..541fc4c6e 100644 --- a/src/GBI.h +++ b/src/GBI.h @@ -55,6 +55,7 @@ #define _FIXED2FLOAT( v, b ) \ ((f32)v * FIXED2FLOATRECIP##b) +#define FIXED2FLOATRECIPCOLOR5 3.22580635547637939453125e-02f #define FIXED2FLOATRECIPCOLOR7 7.8740157186985015869140625e-03f #define FIXED2FLOATRECIPCOLOR8 3.9215688593685626983642578125e-03f diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp index d18b4f1bb..c38ce9ce8 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp @@ -759,8 +759,8 @@ class UColors : public UniformGroup uEnvColor.set(&gDP.envColor.r, _force); uPrimColor.set(&gDP.primColor.r, _force); uPrimLod.set(gDP.primColor.l, _force); - uK4.set(gDP.convert.k4*0.0039215689f, _force); - uK5.set(gDP.convert.k5*0.0039215689f, _force); + uK4.set(_FIXED2FLOATCOLOR(gDP.convert.k4, 8 ), _force); + uK5.set(_FIXED2FLOATCOLOR(gDP.convert.k5, 8 ), _force); } private: diff --git a/src/gDP.cpp b/src/gDP.cpp index 38278d3a8..1000d5640 100644 --- a/src/gDP.cpp +++ b/src/gDP.cpp @@ -180,20 +180,20 @@ void gDPSetDepthImage( u32 address ) void gDPSetEnvColor( u32 r, u32 g, u32 b, u32 a ) { - gDP.envColor.r = r * 0.0039215689f; - gDP.envColor.g = g * 0.0039215689f; - gDP.envColor.b = b * 0.0039215689f; - gDP.envColor.a = a * 0.0039215689f; + gDP.envColor.r = _FIXED2FLOATCOLOR( r, 8 ); + gDP.envColor.g = _FIXED2FLOATCOLOR( g, 8 ); + gDP.envColor.b = _FIXED2FLOATCOLOR( b, 8 ); + gDP.envColor.a = _FIXED2FLOATCOLOR( a, 8 ); DebugMsg( DEBUG_NORMAL, "gDPSetEnvColor( %i, %i, %i, %i );\n", r, g, b, a ); } void gDPSetBlendColor( u32 r, u32 g, u32 b, u32 a ) { - gDP.blendColor.r = r * 0.0039215689f; - gDP.blendColor.g = g * 0.0039215689f; - gDP.blendColor.b = b * 0.0039215689f; - gDP.blendColor.a = a * 0.0039215689f; + gDP.blendColor.r = _FIXED2FLOATCOLOR( r, 8 ); + gDP.blendColor.g = _FIXED2FLOATCOLOR( g, 8 ); + gDP.blendColor.b = _FIXED2FLOATCOLOR( b, 8 ); + gDP.blendColor.a = _FIXED2FLOATCOLOR( a, 8 ); gDP.changed |= CHANGED_BLENDCOLOR; @@ -202,10 +202,10 @@ void gDPSetBlendColor( u32 r, u32 g, u32 b, u32 a ) void gDPSetFogColor( u32 r, u32 g, u32 b, u32 a ) { - gDP.fogColor.r = r * 0.0039215689f; - gDP.fogColor.g = g * 0.0039215689f; - gDP.fogColor.b = b * 0.0039215689f; - gDP.fogColor.a = a * 0.0039215689f; + gDP.fogColor.r = _FIXED2FLOATCOLOR( r, 8 ); + gDP.fogColor.g = _FIXED2FLOATCOLOR( g, 8 ); + gDP.fogColor.b = _FIXED2FLOATCOLOR( b, 8 ); + gDP.fogColor.a = _FIXED2FLOATCOLOR( a, 8 ); gDP.changed |= CHANGED_FOGCOLOR; @@ -225,26 +225,26 @@ void gDPGetFillColor(f32 _fillColor[4]) { const u32 c = gDP.fillColor.color; if (gDP.colorImage.size < 3) { - _fillColor[0] = _SHIFTR( c, 11, 5 ) * 0.032258064f; - _fillColor[1] = _SHIFTR( c, 6, 5 ) * 0.032258064f; - _fillColor[2] = _SHIFTR( c, 1, 5 ) * 0.032258064f; + _fillColor[0] = _FIXED2FLOATCOLOR( _SHIFTR( c, 11, 5 ), 5 ); + _fillColor[1] = _FIXED2FLOATCOLOR( _SHIFTR( c, 6, 5 ), 5 ); + _fillColor[2] = _FIXED2FLOATCOLOR( _SHIFTR( c, 1, 5 ), 5 ); _fillColor[3] = (f32)_SHIFTR( c, 0, 1 ); } else { - _fillColor[0] = _SHIFTR( c, 24, 8 ) * 0.0039215686f; - _fillColor[1] = _SHIFTR( c, 16, 8 ) * 0.0039215686f; - _fillColor[2] = _SHIFTR( c, 8, 8 ) * 0.0039215686f; - _fillColor[3] = _SHIFTR( c, 0, 8 ) * 0.0039215686f; + _fillColor[0] = _FIXED2FLOATCOLOR( _SHIFTR( c, 24, 8 ), 8 ); + _fillColor[1] = _FIXED2FLOATCOLOR( _SHIFTR( c, 16, 8 ), 8 ); + _fillColor[2] = _FIXED2FLOATCOLOR( _SHIFTR( c, 8, 8 ), 8 ); + _fillColor[3] = _FIXED2FLOATCOLOR( _SHIFTR( c, 0, 8 ), 8 ); } } void gDPSetPrimColor( u32 m, u32 l, u32 r, u32 g, u32 b, u32 a ) { - gDP.primColor.m = m * 0.0312500000f; - gDP.primColor.l = l * 0.0039215689f; - gDP.primColor.r = r * 0.0039215689f; - gDP.primColor.g = g * 0.0039215689f; - gDP.primColor.b = b * 0.0039215689f; - gDP.primColor.a = a * 0.0039215689f; + gDP.primColor.m = _FIXED2FLOAT( m, 5 ); + gDP.primColor.l = _FIXED2FLOATCOLOR( l, 8 ); + gDP.primColor.r = _FIXED2FLOATCOLOR( r, 8 ); + gDP.primColor.g = _FIXED2FLOATCOLOR( g, 8 ); + gDP.primColor.b = _FIXED2FLOATCOLOR( b, 8 ); + gDP.primColor.a = _FIXED2FLOATCOLOR( a, 8 ); DebugMsg( DEBUG_NORMAL, "gDPSetPrimColor( %i, %i, %i, %i, %i, %i );\n", m, l, r, g, b, a ); } @@ -781,20 +781,20 @@ void gDPSetConvert( s32 k0, s32 k1, s32 k2, s32 k3, s32 k4, s32 k5 ) void gDPSetKeyR( u32 cR, u32 sR, u32 wR ) { - gDP.key.center.r = cR * 0.0039215689f; - gDP.key.scale.r = sR * 0.0039215689f; - gDP.key.width.r = wR * 0.0039215689f; + gDP.key.center.r = _FIXED2FLOATCOLOR( cR, 8 ); + gDP.key.scale.r = _FIXED2FLOATCOLOR( sR, 8 ); + gDP.key.width.r = _FIXED2FLOATCOLOR( wR, 8 ); DebugMsg( DEBUG_NORMAL, "gDPSetKeyR( %u, %u, %u );\n", cR, sR, wR ); } void gDPSetKeyGB(u32 cG, u32 sG, u32 wG, u32 cB, u32 sB, u32 wB ) { - gDP.key.center.g = cG * 0.0039215689f; - gDP.key.scale.g = sG * 0.0039215689f; - gDP.key.width.g = wG * 0.0039215689f; - gDP.key.center.b = cB * 0.0039215689f; - gDP.key.scale.b = sB * 0.0039215689f; - gDP.key.width.b = wB * 0.0039215689f; + gDP.key.center.g = _FIXED2FLOATCOLOR( cG, 8 ); + gDP.key.scale.g = _FIXED2FLOATCOLOR( sG, 8 ); + gDP.key.width.g = _FIXED2FLOATCOLOR( wG, 8 ); + gDP.key.center.b = _FIXED2FLOATCOLOR( cB, 8 ); + gDP.key.scale.b = _FIXED2FLOATCOLOR( sB, 8 ); + gDP.key.width.b = _FIXED2FLOATCOLOR( wB, 8 ); DebugMsg( DEBUG_NORMAL, "gDPSetKeyGB( %u, %u, %u, %u, %u, %u );\n", cG, sG, wG, cB, sB, wB ); } @@ -1003,7 +1003,7 @@ void gDPLLETriangle(u32 _w1, u32 _w2, int _shade, int _texture, int _zbuffer, u3 #define ZSCALE(z) ((gDP.otherMode.depthSource == G_ZS_PRIM)? gDP.primDepth.z : float(u32(z))/0xffff0000) #define PERSP_EN (gDP.otherMode.texturePersp != 0) #define WSCALE(z) 1.0f/(PERSP_EN? (float(u32(z) + 0x10000)/0xffff0000) : 1.0f) -#define CSCALE(c) ((((c)>0x3ff0000? 0x3ff0000:((c)<0? 0 : (c)))>>18)*0.0039215689f) +#define CSCALE(c) _FIXED2FLOATCOLOR((((c)>0x3ff0000? 0x3ff0000:((c)<0? 0 : (c)))>>18), 8) #define _PERSP(w) ( w ) #define PERSP(s, w) ( ((s64)(s) << 20) / (_PERSP(w)? _PERSP(w):1) ) #define SSCALE(s, _w) (PERSP_EN? float(PERSP(s, _w))/(1 << 10) : float(s)/(1<<21)) diff --git a/src/gSP.cpp b/src/gSP.cpp index f8cb92a20..ff87b97fb 100644 --- a/src/gSP.cpp +++ b/src/gSP.cpp @@ -314,9 +314,9 @@ void gSPLight( u32 l, s32 n ) Light *light = (Light*)&RDRAM[addrByte]; if (n < 8) { - gSP.lights.rgb[n][R] = light->r * 0.0039215689f; - gSP.lights.rgb[n][G] = light->g * 0.0039215689f; - gSP.lights.rgb[n][B] = light->b * 0.0039215689f; + gSP.lights.rgb[n][R] = _FIXED2FLOATCOLOR(light->r,8); + gSP.lights.rgb[n][G] = _FIXED2FLOATCOLOR(light->g,8); + gSP.lights.rgb[n][B] = _FIXED2FLOATCOLOR(light->b,8); gSP.lights.xyz[n][X] = light->x; gSP.lights.xyz[n][Y] = light->y; @@ -1144,12 +1144,12 @@ u32 gSPLoadF3DAMVertexData(const Vertex *orgVtx, SPVertex * spVtx, u32 v0, u32 v vtx.nx = _FIXED2FLOATCOLOR( orgVtx->normal.x, 7 ); vtx.ny = _FIXED2FLOATCOLOR( orgVtx->normal.y, 7 ); vtx.nz = _FIXED2FLOATCOLOR( orgVtx->normal.z, 7 ); - vtx.a = orgVtx->color.a * 0.0039215689f; + vtx.a = _FIXED2FLOATCOLOR(orgVtx->color.a,8); } else { - vtx.r = orgVtx->color.r * 0.0039215689f; - vtx.g = orgVtx->color.g * 0.0039215689f; - vtx.b = orgVtx->color.b * 0.0039215689f; - vtx.a = orgVtx->color.a * 0.0039215689f; + vtx.r = _FIXED2FLOATCOLOR(orgVtx->color.r,8); + vtx.g = _FIXED2FLOATCOLOR(orgVtx->color.g,8); + vtx.b = _FIXED2FLOATCOLOR(orgVtx->color.b,8); + vtx.a = _FIXED2FLOATCOLOR(orgVtx->color.a,8); } ++orgVtx; } @@ -1614,10 +1614,10 @@ void gSPModifyVertex( u32 _vtx, u32 _where, u32 _val ) SPVertex & vtx0 = drawer.getVertex(_vtx); switch (_where) { case G_MWO_POINT_RGBA: - vtx0.r = _SHIFTR( _val, 24, 8 ) * 0.0039215689f; - vtx0.g = _SHIFTR( _val, 16, 8 ) * 0.0039215689f; - vtx0.b = _SHIFTR( _val, 8, 8 ) * 0.0039215689f; - vtx0.a = _SHIFTR( _val, 0, 8 ) * 0.0039215689f; + vtx0.r = _FIXED2FLOATCOLOR(_SHIFTR( _val, 24, 8 ),8); + vtx0.g = _FIXED2FLOATCOLOR(_SHIFTR( _val, 16, 8 ),8); + vtx0.b = _FIXED2FLOATCOLOR(_SHIFTR( _val, 8, 8 ),8); + vtx0.a = _FIXED2FLOATCOLOR(_SHIFTR( _val, 0, 8 ),8); vtx0.modify |= MODIFY_RGBA; DebugMsg(DEBUG_NORMAL, "gSPModifyVertex: RGBA(%02f, %02f, %02f, %02f);\n", vtx0.r, vtx0.g, vtx0.b, vtx0.a); break; @@ -1687,9 +1687,9 @@ void gSPLightColor( u32 lightNum, u32 packedColor ) if (lightNum < 8) { - gSP.lights.rgb[lightNum][R] = _SHIFTR( packedColor, 24, 8 ) * 0.0039215689f; - gSP.lights.rgb[lightNum][G] = _SHIFTR( packedColor, 16, 8 ) * 0.0039215689f; - gSP.lights.rgb[lightNum][B] = _SHIFTR( packedColor, 8, 8 ) * 0.0039215689f; + gSP.lights.rgb[lightNum][R] = _FIXED2FLOATCOLOR(_SHIFTR( packedColor, 24, 8 ),8); + gSP.lights.rgb[lightNum][G] = _FIXED2FLOATCOLOR(_SHIFTR( packedColor, 16, 8 ),8); + gSP.lights.rgb[lightNum][B] = _FIXED2FLOATCOLOR(_SHIFTR( packedColor, 8, 8 ),8); gSP.changed |= CHANGED_HW_LIGHT; } DebugMsg(DEBUG_NORMAL, "gSPLightColor( %i, 0x%08X );\n", lightNum, packedColor ); diff --git a/src/uCodes/ZSort.cpp b/src/uCodes/ZSort.cpp index 6ea51f328..1fffe2d0c 100644 --- a/src/uCodes/ZSort.cpp +++ b/src/uCodes/ZSort.cpp @@ -206,16 +206,16 @@ void ZSort_XFMLight( u32 _w0, u32 _w1 ) */ - gSP.lights.rgb[gSP.numLights][R] = (f32)(((u8*)DMEM)[(addr+0)^3]) * 0.0039215689f; - gSP.lights.rgb[gSP.numLights][G] = (f32)(((u8*)DMEM)[(addr+1)^3]) * 0.0039215689f; - gSP.lights.rgb[gSP.numLights][B] = (f32)(((u8*)DMEM)[(addr+2)^3]) * 0.0039215689f; + gSP.lights.rgb[gSP.numLights][R] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+0)^3], 8 ); + gSP.lights.rgb[gSP.numLights][G] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+1)^3], 8 ); + gSP.lights.rgb[gSP.numLights][B] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+2)^3], 8 ); addr += 8; u32 i; for (i = 0; i < gSP.numLights; ++i) { - gSP.lights.rgb[i][R] = (f32)(((u8*)DMEM)[(addr+0)^3]) * 0.0039215689f; - gSP.lights.rgb[i][G] = (f32)(((u8*)DMEM)[(addr+1)^3]) * 0.0039215689f; - gSP.lights.rgb[i][B] = (f32)(((u8*)DMEM)[(addr+2)^3]) * 0.0039215689f; + gSP.lights.rgb[i][R] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+0)^3], 8 ); + gSP.lights.rgb[i][G] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+1)^3], 8 ); + gSP.lights.rgb[i][B] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+2)^3], 8 ); gSP.lights.xyz[i][X] = (f32)(((s8*)DMEM)[(addr+8)^3]); gSP.lights.xyz[i][Y] = (f32)(((s8*)DMEM)[(addr+9)^3]); gSP.lights.xyz[i][Z] = (f32)(((s8*)DMEM)[(addr+10)^3]); @@ -273,10 +273,10 @@ void ZSort_Lighting( u32 _w0, u32 _w1 ) vtx.a = 1.0f; if (use_material) { - vtx.r *= DMEM[(csrs++)^3] * 0.0039215689f; - vtx.g *= DMEM[(csrs++)^3] * 0.0039215689f; - vtx.b *= DMEM[(csrs++)^3] * 0.0039215689f; - vtx.a = DMEM[(csrs++)^3] * 0.0039215689f; + vtx.r *= _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 ); + vtx.g *= _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 ); + vtx.b *= _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 ); + vtx.a = _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 ); } DMEM[(cdest++)^3] = (u8)(vtx.r * 255.0f); DMEM[(cdest++)^3] = (u8)(vtx.g * 255.0f); diff --git a/src/uCodes/ZSortBOSS.cpp b/src/uCodes/ZSortBOSS.cpp index d12aef522..9033391b2 100644 --- a/src/uCodes/ZSortBOSS.cpp +++ b/src/uCodes/ZSortBOSS.cpp @@ -383,10 +383,10 @@ void ZSortBOSS_DrawObject(u8 * _addr, u32 _type) vtx.x = _FIXED2FLOAT(((s16*)_addr)[0 ^ 1], 2); vtx.y = _FIXED2FLOAT(((s16*)_addr)[1 ^ 1], 2); vtx.z = 0.0f; - vtx.r = _addr[4^3] * 0.0039215689f; - vtx.g = _addr[5^3] * 0.0039215689f; - vtx.b = _addr[6^3] * 0.0039215689f; - vtx.a = _addr[7^3] * 0.0039215689f; + vtx.r = _FIXED2FLOATCOLOR(_addr[4^3], 8 ); + vtx.g = _FIXED2FLOATCOLOR(_addr[5^3], 8 ); + vtx.b = _FIXED2FLOATCOLOR(_addr[6^3], 8 ); + vtx.a = _FIXED2FLOATCOLOR(_addr[7^3], 8 ); vtx.flag = 0; vtx.HWLight = 0; vtx.clip = 0; @@ -601,9 +601,9 @@ void ZSortBOSS_TransformLights( u32 _w0, u32 _w1 ) { assert(0); - gSP.lights.rgb[i][R] = (f32)(((u8*)DMEM)[(addr+8+0)^3]) * 0.0039215689f; - gSP.lights.rgb[i][G] = (f32)(((u8*)DMEM)[(addr+8+1)^3]) * 0.0039215689f; - gSP.lights.rgb[i][B] = (f32)(((u8*)DMEM)[(addr+8+2)^3]) * 0.0039215689f; + gSP.lights.rgb[i][R] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+8+0)^3], 8 ); + gSP.lights.rgb[i][G] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+8+1)^3], 8 ); + gSP.lights.rgb[i][B] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+8+2)^3], 8 ); gSP.lights.xyz[i][X] = _FIXED2FLOAT((((s8*)DMEM)[(addr+16+0)^3]),8); gSP.lights.xyz[i][Y] = _FIXED2FLOAT((((s8*)DMEM)[(addr+16+1)^3]),8);