diff --git a/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp b/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp index 9ea3db5a..2e0b98d7 100644 --- a/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp +++ b/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp @@ -102,6 +102,18 @@ void LatteShaderCache_removeFromCompileQueue(sint32 index) */ void LatteShaderCache_updateCompileQueue(sint32 maxRemainingEntries) { + // remove any shaders that are already done + for (size_t i = 0; i < shaderCompileQueue.count; i++) + { + auto shaderEntry = shaderCompileQueue.entry[i].shader; + if (!shaderEntry) + continue; + if (shaderEntry->shader->IsCompiled()) + { + LatteShader_prepareSeparableUniforms(shaderEntry); + LatteShaderCache_removeFromCompileQueue(i); + } + } while (true) { if (shaderCompileQueue.count <= maxRemainingEntries)