D3D: Minor bug fix and some code cleanup for DirectX API call reduction.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4244 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
rice1964
2009-09-10 03:36:32 +00:00
parent b3194e596e
commit c046c27815
8 changed files with 33 additions and 30 deletions

View File

@ -32,43 +32,42 @@
PixelShaderCache::PSCache PixelShaderCache::PixelShaders;
const PixelShaderCache::PSCacheEntry *PixelShaderCache::last_entry;
PIXELSHADERUID PixelShaderCache::last_entry_uid;
static float lastPSConstants[C_COLORMATRIX+16][4];
static float lastPSconstants[C_COLORMATRIX+16][4];
void SetPSConstant4f(int const_number, float f1, float f2, float f3, float f4)
{
if( lastPSConstants[const_number][0] != f1 || lastPSConstants[const_number][1] != f2 ||
lastPSConstants[const_number][2] != f3 || lastPSConstants[const_number][3] != f4 )
if( lastPSconstants[const_number][0] != f1 || lastPSconstants[const_number][1] != f2 ||
lastPSconstants[const_number][2] != f3 || lastPSconstants[const_number][3] != f4 )
{
const float f[4] = {f1, f2, f3, f4};
D3D::dev->SetPixelShaderConstantF(const_number, f, 1);
lastPSConstants[const_number][0] = f1;
lastPSConstants[const_number][1] = f2;
lastPSConstants[const_number][2] = f3;
lastPSConstants[const_number][3] = f4;
lastPSconstants[const_number][0] = f1;
lastPSconstants[const_number][1] = f2;
lastPSconstants[const_number][2] = f3;
lastPSconstants[const_number][3] = f4;
}
}
void SetPSConstant4fv(int const_number, const float *f)
{
if( lastPSConstants[const_number][0] != f[0] || lastPSConstants[const_number][1] != f[1] ||
lastPSConstants[const_number][2] != f[2] || lastPSConstants[const_number][3] != f[3] )
if( lastPSconstants[const_number][0] != f[0] || lastPSconstants[const_number][1] != f[1] ||
lastPSconstants[const_number][2] != f[2] || lastPSconstants[const_number][3] != f[3] )
{
D3D::dev->SetPixelShaderConstantF(const_number, f, 1);
lastPSConstants[const_number][0] = f[0];
lastPSConstants[const_number][1] = f[1];
lastPSConstants[const_number][2] = f[2];
lastPSConstants[const_number][3] = f[3];
lastPSconstants[const_number][0] = f[0];
lastPSconstants[const_number][1] = f[1];
lastPSconstants[const_number][2] = f[2];
lastPSconstants[const_number][3] = f[3];
}
}
void PixelShaderCache::Init()
{
int i;
for (i=0;i<(C_COLORMATRIX+16)*4;i++)
lastPSConstants[i/4][i%4]= -1;
memset(&last_entry_uid,0xFF,sizeof(last_entry_uid));
//memset(lastPSconstants,0xFF,(C_COLORMATRIX+16)*4*sizeof(float)); // why does this not work
//memset(lastPSconstants,0xFF,sizeof(lastPSconstants));
for( int i=0;i<(C_COLORMATRIX+16)*4;i++)
lastPSconstants[i/4][i%4] = -100000000.0f;
memset(&last_pixel_shader_uid,0xFF,sizeof(last_pixel_shader_uid));
}
void PixelShaderCache::Shutdown()
@ -85,7 +84,7 @@ bool PixelShaderCache::SetShader(bool dstAlpha)
PIXELSHADERUID uid;
GetPixelShaderId(uid, PixelShaderManager::GetTextureMask(), dstAlpha);
if (uid == last_entry_uid)
if (uid == last_pixel_shader_uid)
{
if (PixelShaders[uid].shader)
return true;
@ -93,7 +92,7 @@ bool PixelShaderCache::SetShader(bool dstAlpha)
return false;
}
memcpy(&last_entry_uid, &uid, sizeof(PIXELSHADERUID));
memcpy(&last_pixel_shader_uid, &uid, sizeof(PIXELSHADERUID));
PSCache::iterator iter;
iter = PixelShaders.find(uid);