MCPcopy Create free account
hub / github.com/baldurk/renderdoc / DisassembleShader

Method DisassembleShader

qrenderdoc/Code/Interface/ShaderProcessingTool.cpp:255–314  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

253}
254
255ShaderToolOutput ShaderProcessingTool::DisassembleShader(QWidget *window,
256 const ShaderReflection *shaderDetails,
257 rdcstr arguments) const
258{
259 QStringList argList = ParseArgsList(arguments.isEmpty() ? DefaultArguments() : arguments);
260 // always append IO arguments for known tools, so we read/write to our own files and override any
261 // dangling output specified file in the embedded command line
262 argList.append(ParseArgsList(IOArguments()));
263
264 QString input_file, output_file;
265
266 input_file = tmpPath(lit("shader_input"));
267
268 QString spirvVer = lit("spirv1.0");
269 for(const ShaderCompileFlag &flag : shaderDetails->debugInfo.compileFlags.flags)
270 if(flag.name == "@spirver")
271 spirvVer = flag.value;
272
273 // replace arguments after expansion to avoid problems with quoting paths etc
274 for(QString &arg : argList)
275 {
276 if(arg == lit("{input_file}"))
277 arg = input_file;
278 if(arg == lit("{output_file}"))
279 arg = output_file = tmpPath(lit("shader_output"));
280 if(arg == lit("{entry_point}"))
281 {
282 arg = shaderDetails->entryPoint;
283 if(arg.isEmpty())
284 arg = lit("main");
285 }
286
287 // substring replacements to enable e.g. {hlsl_stage2}_6_0 and ={vulkan_ver}
288 arg.replace(lit("{glsl_stage4}"), glsl_stage4[int(shaderDetails->stage)]);
289 arg.replace(lit("{hlsl_stage2}"), hlsl_stage2[int(shaderDetails->stage)]);
290 arg.replace(lit("{full_stage}"), full_stage[int(shaderDetails->stage)]);
291 arg.replace(lit("{spirv_ver}"), spirvVer);
292 arg.replace(lit("{vulkan_ver}"), vulkanVerForSpirVer(spirvVer));
293 }
294
295 QFile binHandle(input_file);
296 if(binHandle.open(QFile::WriteOnly | QIODevice::Truncate))
297 {
298 binHandle.write(
299 QByteArray((const char *)shaderDetails->rawBytes.data(), shaderDetails->rawBytes.count()));
300 binHandle.close();
301 }
302 else
303 {
304 ShaderToolOutput ret;
305
306 ret.log = QApplication::translate("ShaderProcessingTool",
307 "ERROR: Couldn't write input to temporary file '%1'")
308 .arg(input_file);
309
310 return ret;
311 }
312

Callers

nothing calls this directly

Calls 15

ParseArgsListFunction · 0.85
tmpPathFunction · 0.85
vulkanVerForSpirVerFunction · 0.85
RunToolFunction · 0.85
QByteArrayClass · 0.50
translateFunction · 0.50
isEmptyMethod · 0.45
appendMethod · 0.45
replaceMethod · 0.45
openMethod · 0.45
writeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected