From 097e6657e807c10d304fe6710111e43dfcfe2dd6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 6 Sep 2021 12:52:35 +0100 Subject: [PATCH] Write attached metadata in functions --- .../shaders/dxil/dxil_bytecode_editor.cpp | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp index 829436c3e..d15480d77 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp @@ -584,11 +584,15 @@ bytebuf DXIL::ProgramEditor::EncodeProgram() const bool forwardRefs = false; rdcarray vals; + bool needMetaAttach = !f.attachedMeta.empty(); + for(const Instruction &inst : f.instructions) { forwardRefs = false; vals.clear(); + needMetaAttach |= !inst.attachedMeta.empty(); + switch(inst.op) { case Operation::NoOp: RDCERR("Unexpected no-op encoding"); continue; @@ -1058,6 +1062,42 @@ bytebuf DXIL::ProgramEditor::EncodeProgram() const debugLoc = inst.debugLoc; } + if(needMetaAttach) + { + writer.BeginBlock(LLVMBC::KnownBlock::METADATA_ATTACHMENT); + + vals.clear(); + + for(const rdcpair &m : f.attachedMeta) + { + vals.push_back(m.first); + vals.push_back(getFunctionMetaID(m.second)); + } + + if(!vals.empty()) + writer.Record(LLVMBC::MetaDataRecord::ATTACHMENT, vals); + + for(size_t i = 0; i < f.instructions.size(); i++) + { + if(f.instructions[i].attachedMeta.empty()) + continue; + + vals.clear(); + + vals.push_back(uint64_t(i)); + + for(const rdcpair &m : f.instructions[i].attachedMeta) + { + vals.push_back(m.first); + vals.push_back(getFunctionMetaID(m.second)); + } + + writer.Record(LLVMBC::MetaDataRecord::ATTACHMENT, vals); + } + + writer.EndBlock(); + } + writer.EndBlock(); values.resize(values.size() - f.values.size());