diff --git a/src/Cafe/HW/Latte/Core/LatteShader.cpp b/src/Cafe/HW/Latte/Core/LatteShader.cpp index 3e6bf41e..886b6f38 100644 --- a/src/Cafe/HW/Latte/Core/LatteShader.cpp +++ b/src/Cafe/HW/Latte/Core/LatteShader.cpp @@ -357,19 +357,6 @@ void LatteShader_CreateRendererShader(LatteDecompilerShader* shader, bool compil LatteShader_CleanupAfterCompile(shader); } -void LatteShader_FinishCompilation(LatteDecompilerShader* shader) -{ - if (shader->hasError) - { - cemuLog_logDebug(LogType::Force, "LatteShader_finishCompilation(): Skipped because of error in shader {:x}", shader->baseHash); - return; - } - shader->shader->WaitForCompiled(); - - LatteShader_prepareSeparableUniforms(shader); - LatteShader_CleanupAfterCompile(shader); -} - void LatteSHRC_RegisterShader(LatteDecompilerShader* shader, uint64 baseHash, uint64 auxHash) { auto& cache = LatteSHRC_GetCacheByType(shader->shaderType); @@ -768,7 +755,7 @@ LatteDecompilerShader* LatteShader_CompileSeparableVertexShader(uint64 baseHash, { if (vertexShader->shader) vertexShader->shader->PreponeCompilation(); - LatteShader_FinishCompilation(vertexShader); + LatteShader_prepareSeparableUniforms(vertexShader); } LatteSHRC_RegisterShader(vertexShader, vertexShader->baseHash, vertexShader->auxHash); @@ -797,7 +784,7 @@ LatteDecompilerShader* LatteShader_CompileSeparableGeometryShader(uint64 baseHas { if (geometryShader->shader) geometryShader->shader->PreponeCompilation(); - LatteShader_FinishCompilation(geometryShader); + LatteShader_prepareSeparableUniforms(geometryShader); } LatteSHRC_RegisterShader(geometryShader, geometryShader->baseHash, geometryShader->auxHash); @@ -826,7 +813,7 @@ LatteDecompilerShader* LatteShader_CompileSeparablePixelShader(uint64 baseHash, { if (pixelShader->shader) pixelShader->shader->PreponeCompilation(); - LatteShader_FinishCompilation(pixelShader); + LatteShader_prepareSeparableUniforms(pixelShader); } LatteSHRC_RegisterShader(pixelShader, _shaderBaseHash_ps, psAuxHash); diff --git a/src/Cafe/HW/Latte/Core/LatteShader.h b/src/Cafe/HW/Latte/Core/LatteShader.h index f8dc6d1a..42e952dd 100644 --- a/src/Cafe/HW/Latte/Core/LatteShader.h +++ b/src/Cafe/HW/Latte/Core/LatteShader.h @@ -99,7 +99,6 @@ void LatteShader_GetDecompilerOptions(struct LatteDecompilerOptions& options, La LatteDecompilerShader* LatteShader_CreateShaderFromDecompilerOutput(LatteDecompilerOutput_t& decompilerOutput, uint64 baseHash, bool calculateAuxHash, uint64 optionalAuxHash, uint32* contextRegister); void LatteShader_CreateRendererShader(LatteDecompilerShader* shader, bool compileAsync); -void LatteShader_FinishCompilation(LatteDecompilerShader* shader); void LatteShader_prepareSeparableUniforms(LatteDecompilerShader* shader); diff --git a/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp b/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp index 737e9201..9ea3db5a 100644 --- a/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp +++ b/src/Cafe/HW/Latte/Core/LatteShaderCache.cpp @@ -108,7 +108,10 @@ void LatteShaderCache_updateCompileQueue(sint32 maxRemainingEntries) break; auto shader = shaderCompileQueue.entry[0].shader; if (shader) - LatteShader_FinishCompilation(shader); + { + shader->shader->PreponeCompilation(); + LatteShader_prepareSeparableUniforms(shader); + } LatteShaderCache_removeFromCompileQueue(0); } } diff --git a/src/Cafe/HW/Latte/Core/LatteShaderGL.cpp b/src/Cafe/HW/Latte/Core/LatteShaderGL.cpp index b8cb0ce1..3384b60c 100644 --- a/src/Cafe/HW/Latte/Core/LatteShaderGL.cpp +++ b/src/Cafe/HW/Latte/Core/LatteShaderGL.cpp @@ -28,6 +28,8 @@ void LatteShader_prepareSeparableUniforms(LatteDecompilerShader* shader) { if (g_renderer->GetType() == RendererAPI::Vulkan) return; + if(shader->hasError) + return; auto shaderGL = (RendererShaderGL*)shader->shader; // setup uniform info