From fed556ad68714c9a4bfe7aa769cb954298aad59c Mon Sep 17 00:00:00 2001 From: Frodo Baggins Date: Sat, 5 Oct 2024 12:39:59 -0700 Subject: [PATCH] add notes about DebugPrint IR op --- src/shader_recompiler/ir/ir_emitter.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/shader_recompiler/ir/ir_emitter.cpp b/src/shader_recompiler/ir/ir_emitter.cpp index b35ecb64a..c842fd920 100644 --- a/src/shader_recompiler/ir/ir_emitter.cpp +++ b/src/shader_recompiler/ir/ir_emitter.cpp @@ -1558,6 +1558,16 @@ void IREmitter::ImageWrite(const Value& handle, const Value& coords, const Value Inst(Opcode::ImageWrite, Flags{info}, handle, coords, color); } +// Debug print maps to SPIRV's NonSemantic DebugPrintf instruction +// Renderdoc will hook in its own implementation of the SPIRV instruction +// Renderdoc accepts format specifiers, e.g. %u, listed here: +// https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/debug_printf.md +// +// Example usage: +// ir.DebugPrint("invocation xyz: (%u, %u, %u)", +// {ir.GetVectorReg(IR::VectorReg::V0), +// ir.GetVectorReg(IR::VectorReg::V1), +// ir.GetVectorReg(IR::VectorReg::V2)}); void IREmitter::DebugPrint(std::string_view format, boost::container::small_vector format_args) { constexpr size_t PRINT_MAX_ARGS = NumArgsOf(IR::Opcode::DebugPrint);