diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index aa06340c38..2957585ea9 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -1448,9 +1448,18 @@ namespace SIE } logger::debug("Compiling {} {}:{}:{:X} to {}", pathString, magic_enum::enum_name(type), magic_enum::enum_name(shaderClass), descriptor, MergeDefinesString(defines)); - // compile shaders + // compile shaders — match Utils/D3D.cpp CompileShader flag policy (strictness, optional toggles, validation). ID3DBlob* errorBlob = nullptr; - const uint32_t flags = !globals::state->IsDeveloperMode() ? D3DCOMPILE_OPTIMIZATION_LEVEL3 : D3DCOMPILE_DEBUG; + uint32_t flags = !globals::state->IsDeveloperMode() ? (D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_OPTIMIZATION_LEVEL3) : D3DCOMPILE_DEBUG; + if (globals::state->enablePartialPrecision.load(std::memory_order_relaxed)) { + flags |= D3DCOMPILE_PARTIAL_PRECISION; + } + if (globals::state->enableAvoidFlowControl.load(std::memory_order_relaxed)) { + flags |= D3DCOMPILE_AVOID_FLOW_CONTROL; + } + if (useDiskCache) { + flags |= D3DCOMPILE_SKIP_VALIDATION; + } // Track includes TrackingIncludeHandler includeHandler(std::filesystem::path(path).parent_path());