diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index 0310c5ba9..59853c293 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -597,6 +597,7 @@ void Reflector::RegisterOp(Iter it) else if(dbg.inst == ShaderDbg::EntryPoint) { funcToBaseFile[dbg.arg(0)] = compUnitToFileIndex[dbg.arg(1)]; + funcToCmdLine[dbg.arg(0)] = strings[dbg.arg(3)]; } else if(dbg.inst == ShaderDbg::GlobalVariable) { @@ -831,9 +832,6 @@ void Reflector::MakeReflection(const GraphicsAPI sourceAPI, const ShaderStage st reflection.dispatchThreadsDimension[2] = 0; } - if(!cmdline.empty()) - reflection.debugInfo.compileFlags.flags = {{"@cmdline", cmdline}}; - for(size_t i = 0; i < sources.size(); i++) { switch(sources[i].lang) @@ -866,6 +864,15 @@ void Reflector::MakeReflection(const GraphicsAPI sourceAPI, const ShaderStage st reflection.debugInfo.editBaseFile = (int32_t)it->second; } + if(!cmdline.empty()) + reflection.debugInfo.compileFlags.flags = {{"@cmdline", cmdline}}; + + { + auto it = funcToCmdLine.find(entry->id); + if(it != funcToCmdLine.end()) + reflection.debugInfo.compileFlags.flags = {{"@cmdline", it->second}}; + } + PreprocessLineDirectives(reflection.debugInfo.files); // we do a mini-preprocess of the files from the debug info to handle #line directives. diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.h b/renderdoc/driver/shaders/spirv/spirv_reflect.h index 9a5e5b3b0..9664277d8 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.h +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.h @@ -131,6 +131,7 @@ private: SparseIdMap debugSources; SparseIdMap compUnitToFileIndex; SparseIdMap funcToBaseFile; + SparseIdMap funcToCmdLine; SparseIdMap debugFuncToLocation; SparseIdMap funcToLocation;