mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Make sure to gen the frag shader matching the id.
Otherwise, the frag shader might be generated accounting for different vertexFullAlpha values, or otherwise won't match up with the id, since we change flags between the two Apply calls.
This commit is contained in:
parent
42a7060193
commit
e80c63945a
2 changed files with 13 additions and 11 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -199,8 +199,7 @@ private:
|
|||
|
||||
LinkedShaderCache linkedShaderCache_;
|
||||
|
||||
FragmentShaderID FSID_;
|
||||
bool lastShaderSame_;
|
||||
bool lastVShaderSame_;
|
||||
|
||||
FragmentShaderID lastFSID_;
|
||||
VertexShaderID lastVSID_;
|
||||
|
|
Loading…
Add table
Reference in a new issue