diff --git a/GPU/GLES/ShaderManager.cpp b/GPU/GLES/ShaderManager.cpp index 6d9e894c2c..08c4d41dee 100644 --- a/GPU/GLES/ShaderManager.cpp +++ b/GPU/GLES/ShaderManager.cpp @@ -631,19 +631,16 @@ Shader *ShaderManager::ApplyVertexShader(int prim, u32 vertType) { VertexShaderID VSID; ComputeVertexShaderID(&VSID, vertType, prim, useHWTransform); - ComputeFragmentShaderID(&FSID_); // Just update uniforms if this is the same shader as last time. - if (lastShader_ != 0 && VSID == lastVSID_ && FSID_ == lastFSID_) { - lastShader_->UpdateUniforms(vertType); - lastShaderSame_ = true; + if (lastShader_ != 0 && VSID == lastVSID_) { + lastVShaderSame_ = true; return lastShader_->vs_; // Already all set. } else { - lastShaderSame_ = false; + lastVShaderSame_ = false; } lastVSID_ = VSID; - lastFSID_ = FSID_; VSCache::iterator vsIter = vsCache_.find(VSID); Shader *vs; @@ -674,16 +671,22 @@ Shader *ShaderManager::ApplyVertexShader(int prim, u32 vertType) { } LinkedShader *ShaderManager::ApplyFragmentShader(Shader *vs, int prim, u32 vertType) { - if (lastShaderSame_) + FragmentShaderID FSID; + ComputeFragmentShaderID(&FSID); + if (lastVShaderSame_ && FSID == lastFSID_) { + lastShader_->UpdateUniforms(vertType); return lastShader_; + } - FSCache::iterator fsIter = fsCache_.find(FSID_); + lastFSID_ = FSID; + + FSCache::iterator fsIter = fsCache_.find(FSID); Shader *fs; if (fsIter == fsCache_.end()) { // Fragment shader not in cache. Let's compile it. GenerateFragmentShader(codeBuffer_); fs = new Shader(codeBuffer_, GL_FRAGMENT_SHADER, vs->UseHWTransform()); - fsCache_[FSID_] = fs; + fsCache_[FSID] = fs; } else { fs = fsIter->second; } diff --git a/GPU/GLES/ShaderManager.h b/GPU/GLES/ShaderManager.h index 2a7bba13c3..b589b66f90 100644 --- a/GPU/GLES/ShaderManager.h +++ b/GPU/GLES/ShaderManager.h @@ -199,8 +199,7 @@ private: LinkedShaderCache linkedShaderCache_; - FragmentShaderID FSID_; - bool lastShaderSame_; + bool lastVShaderSame_; FragmentShaderID lastFSID_; VertexShaderID lastVSID_;