From ed9f097911302b64ebbceb21557ed6b43b53dc17 Mon Sep 17 00:00:00 2001 From: Dennis Brakhane Date: Thu, 23 Jan 2025 21:17:05 +0100 Subject: [PATCH] offlineshadercompiler: shaderdump no longer implies rebuild --- WickedEngine/offlineshadercompiler.cpp | 34 ++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/WickedEngine/offlineshadercompiler.cpp b/WickedEngine/offlineshadercompiler.cpp index b9985e5d62..17835d2e31 100644 --- a/WickedEngine/offlineshadercompiler.cpp +++ b/WickedEngine/offlineshadercompiler.cpp @@ -393,7 +393,7 @@ int main(int argc, char* argv[]) std::cout << "\trebuild : \t\tAll shaders will be rebuilt, regardless if they are outdated or not\n"; std::cout << "\tdisable_optimization : \tShaders will be compiled without optimizations\n"; std::cout << "\tstrip_reflection : \tReflection will be stripped from shader binary to reduce file size\n"; - std::cout << "\tshaderdump : \t\tShaders will be saved to wiShaderDump.h C++ header file (rebuild is assumed)\n"; + std::cout << "\tshaderdump : \t\tShaders will be saved to wiShaderDump.h C++ header file (can be combined with \"rebuild\")\n"; std::cout << "Command arguments used: "; wi::arguments::Parse(argc, argv); @@ -427,7 +427,6 @@ int main(int argc, char* argv[]) if (wi::arguments::HasArgument("shaderdump")) { shaderdump_enabled = true; - rebuild = true; std::cout << "shaderdump "; } @@ -546,9 +545,35 @@ int main(int argc, char* argv[]) shaderbinaryfilename += "_" + def; } shaderbinaryfilename += ".cso"; - if (!rebuild && !wi::shadercompiler::IsShaderOutdated(shaderbinaryfilename)) + + wi::shadercompiler::CompilerOutput output; + + if (!wi::shadercompiler::IsShaderOutdated(shaderbinaryfilename)) { - return; + if (!rebuild) + { + if (shaderdump_enabled) + { + auto vec = std::make_shared>(); + + if (wi::helper::FileRead(shaderbinaryfilename, *vec)) + { + output.internal_state = vec; + output.shaderdata = vec->data(); + output.shadersize = vec->size(); + locker.lock(); + results[shaderbinaryfilename] = output; + std::cout << "up-to-date: " << shaderbinaryfilename << std::endl; + locker.unlock(); + } + else { + locker.lock(); + std::cerr << "ERROR reading binary shader: " << shaderbinaryfilename << std::endl; + locker.unlock(); + } + } + return; + } } wi::shadercompiler::CompilerInput input; @@ -577,7 +602,6 @@ int main(int argc, char* argv[]) return; } - wi::shadercompiler::CompilerOutput output; wi::shadercompiler::Compile(input, output); if (output.IsValid())