From f5eb184969361be46f68dbcd9cd55a266d2ac7a8 Mon Sep 17 00:00:00 2001 From: Samuliak Date: Wed, 15 Jan 2025 19:30:46 +0100 Subject: [PATCH] check if shaders compiled successfully --- src/Cafe/HW/Latte/Renderer/Metal/MetalCommon.h | 7 ++++++- src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Cafe/HW/Latte/Renderer/Metal/MetalCommon.h b/src/Cafe/HW/Latte/Renderer/Metal/MetalCommon.h index 2543a9fc..a03e7cae 100644 --- a/src/Cafe/HW/Latte/Renderer/Metal/MetalCommon.h +++ b/src/Cafe/HW/Latte/Renderer/Metal/MetalCommon.h @@ -103,11 +103,16 @@ inline bool FormatIsRenderable(Latte::E_GX2SURFFMT format) } template -inline void executeCommand(fmt::format_string fmt, T&&... args) { +inline bool executeCommand(fmt::format_string fmt, T&&... args) { std::string command = fmt::format(fmt, std::forward(args)...); int res = system(command.c_str()); if (res != 0) + { cemuLog_log(LogType::Force, "command \"{}\" failed with exit code {}", command, res); + return false; + } + + return true; } class MemoryMappedFile diff --git a/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp b/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp index 303ba1e9..810c827b 100644 --- a/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp +++ b/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp @@ -29,7 +29,7 @@ public: if (m_threadsActive.exchange(true)) return; // create thread pool - const uint32 threadCount = 8; + const uint32 threadCount = 2; for (uint32 i = 0; i < threadCount; ++i) s_threads.emplace_back(&ShaderMtlThreadPool::CompilerThreadFunc, this); } @@ -295,8 +295,10 @@ void RendererShaderMtl::CompileInternal() mslFile.close(); // Compile - executeCommand("xcrun -sdk macosx metal -o {}.ir -c {}.metal -w", baseFilename, baseFilename); - executeCommand("xcrun -sdk macosx metallib -o {}.metallib {}.ir", baseFilename, baseFilename); + if (!executeCommand("xcrun -sdk macosx metal -o {}.ir -c {}.metal -w", baseFilename, baseFilename)) + return; + if (!executeCommand("xcrun -sdk macosx metallib -o {}.metallib {}.ir", baseFilename, baseFilename)) + return; // Clean up executeCommand("rm {}.metal", baseFilename);