From 7b96962ba0fa529a5e5fee806dbcb80c35a94442 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 18 Jun 2020 13:30:37 +0100 Subject: [PATCH] Rename 'Value' to 'Constant' to get away from the overloaded LLVM term --- .../driver/shaders/dxil/dxil_bytecode.cpp | 136 +++++++++--------- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 16 +-- .../driver/shaders/dxil/dxil_debuginfo.cpp | 30 ++-- .../driver/shaders/dxil/dxil_disassemble.cpp | 56 ++++---- .../driver/shaders/dxil/dxil_reflect.cpp | 8 +- 5 files changed, 125 insertions(+), 121 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp index df15ce280..27afc8642 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp @@ -226,8 +226,8 @@ enum class TypeRecord : uint32_t void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, std::function getType, std::function getPtrType, - std::function getValue, - std::function addValue) + std::function getConstant, + std::function addConstant) { if(IS_KNOWN(constant.id, ConstantsRecord::SETTYPE)) { @@ -236,22 +236,22 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, else if(IS_KNOWN(constant.id, ConstantsRecord::CONST_NULL) || IS_KNOWN(constant.id, ConstantsRecord::UNDEF)) { - Value v; + Constant v; v.type = curType; v.nullconst = IS_KNOWN(constant.id, ConstantsRecord::CONST_NULL); v.undef = IS_KNOWN(constant.id, ConstantsRecord::UNDEF); - addValue(v); + addConstant(v); } else if(IS_KNOWN(constant.id, ConstantsRecord::INTEGER)) { - Value v; + Constant v; v.type = curType; v.val.s64v[0] = LLVMBC::BitReader::svbr(constant.ops[0]); - addValue(v); + addConstant(v); } else if(IS_KNOWN(constant.id, ConstantsRecord::FLOAT)) { - Value v; + Constant v; v.type = curType; if(curType->bitWidth == 16) v.val.fv[0] = ConvertFromHalf(uint16_t(constant.ops[0] & 0xffff)); @@ -259,21 +259,21 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, memcpy(&v.val.fv[0], &constant.ops[0], sizeof(float)); else memcpy(&v.val.dv[0], &constant.ops[0], sizeof(double)); - addValue(v); + addConstant(v); } else if(IS_KNOWN(constant.id, ConstantsRecord::STRING) || IS_KNOWN(constant.id, ConstantsRecord::CSTRING)) { - Value v; + Constant v; v.type = curType; v.str = constant.getString(0); - addValue(v); + addConstant(v); } else if(IS_KNOWN(constant.id, ConstantsRecord::EVAL_GEP)) { - Value v; + Constant v; - v.op = Value::GEP; + v.op = Constant::GEP; size_t idx = 0; if(constant.ops.size() & 1) @@ -282,7 +282,7 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, for(; idx < constant.ops.size(); idx += 2) { const Type *t = getType(constant.ops[idx]); - const Value *a = getValue(constant.ops[idx + 1]); + const Constant *a = getConstant(constant.ops[idx + 1]); RDCASSERT(t == a->type); v.members.push_back(*a); @@ -311,18 +311,18 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, // the result is a pointer to the return type v.type = getPtrType(v.type); - addValue(v); + addConstant(v); } else if(IS_KNOWN(constant.id, ConstantsRecord::AGGREGATE)) { - Value v; + Constant v; v.type = curType; if(v.type->type == Type::Vector) { // inline vectors for(size_t m = 0; m < constant.ops.size(); m++) { - const Value *member = getValue(constant.ops[m]); + const Constant *member = getConstant(constant.ops[m]); if(member) { @@ -333,7 +333,7 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, } else { - RDCERR("Index %llu out of bounds for values array", constant.ops[m]); + RDCERR("Index %llu out of bounds for constants array", constant.ops[m]); } } } @@ -341,7 +341,7 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, { for(uint64_t m : constant.ops) { - const Value *member = getValue(m); + const Constant *member = getConstant(m); if(member) { @@ -349,16 +349,16 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, } else { - v.members.push_back(Value()); - RDCERR("Index %llu out of bounds for values array", m); + v.members.push_back(Constant()); + RDCERR("Index %llu out of bounds for constants array", m); } } } - addValue(v); + addConstant(v); } else if(IS_KNOWN(constant.id, ConstantsRecord::DATA)) { - Value v; + Constant v; v.type = curType; if(v.type->type == Type::Vector) { @@ -374,7 +374,7 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, { for(size_t m = 0; m < constant.ops.size(); m++) { - Value el; + Constant el; el.type = v.type->inner; if(el.type->bitWidth <= 32) el.val.uv[0] = constant.ops[m] & ((1ULL << el.type->bitWidth) - 1); @@ -383,7 +383,7 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, v.members.push_back(el); } } - addValue(v); + addConstant(v); } else { @@ -498,7 +498,7 @@ Program::Program(const byte *bytes, size_t length) // all global symbols are 'values' in LLVM, we don't need this but need to keep indexing the // same - Value v; + Constant v; v.type = g.type; v.symbol = true; @@ -509,7 +509,7 @@ Program::Program(const byte *bytes, size_t length) g.type = v.type; - m_Values.push_back(v); + m_Constants.push_back(v); m_GlobalVars.push_back(g); } else if(IS_KNOWN(rootchild.id, ModuleRecord::FUNCTION)) @@ -531,7 +531,7 @@ Program::Program(const byte *bytes, size_t length) // all global symbols are 'values' in LLVM, we don't need this but need to keep indexing the // same - Value v; + Constant v; v.symbol = true; v.type = f.funcType; @@ -547,7 +547,7 @@ Program::Program(const byte *bytes, size_t length) if(v.type == f.funcType) RDCERR("Expected to find pointer type for function"); - m_Values.push_back(v); + m_Constants.push_back(v); if(!f.external) functionDecls.push_back(m_Functions.size()); @@ -564,10 +564,10 @@ Program::Program(const byte *bytes, size_t length) // all global symbols are 'values' in LLVM, we don't need this but need to keep indexing the // same - Value v; + Constant v; v.type = &m_Types[(size_t)rootchild.ops[0]]; v.symbol = true; - m_Values.push_back(v); + m_Constants.push_back(v); m_Aliases.push_back(a); } @@ -859,11 +859,11 @@ Program::Program(const byte *bytes, size_t length) [this](const Type *t) { return GetPointerType(t); }, [this](uint64_t v) { size_t idx = (size_t)v; - return idx < m_Values.size() ? &m_Values[idx] : NULL; + return idx < m_Constants.size() ? &m_Constants[idx] : NULL; }, - [this](const Value &v) { - m_Symbols.push_back({SymbolType::Constant, m_Values.size()}); - m_Values.push_back(v); + [this](const Constant &v) { + m_Symbols.push_back({SymbolType::Constant, m_Constants.size()}); + m_Constants.push_back(v); }); } } @@ -899,13 +899,13 @@ Program::Program(const byte *bytes, size_t length) RDCERR("Unexpected global symbol referring to %d", m_Symbols[s].type); break; case SymbolType::GlobalVar: - m_Values[s].str = m_GlobalVars[idx].name = symtab.getString(1); + m_Constants[s].str = m_GlobalVars[idx].name = symtab.getString(1); break; case SymbolType::Function: - m_Values[s].str = m_Functions[idx].name = symtab.getString(1); + m_Constants[s].str = m_Functions[idx].name = symtab.getString(1); break; case SymbolType::Alias: - m_Values[s].str = m_Aliases[idx].name = symtab.getString(1); + m_Constants[s].str = m_Aliases[idx].name = symtab.getString(1); break; } } @@ -963,20 +963,20 @@ Program::Program(const byte *bytes, size_t length) if(IS_KNOWN(metaRecord.id, MetaDataRecord::STRING_OLD)) { - meta.value = true; + meta.isConstant = true; meta.str = metaRecord.getString(); } else if(IS_KNOWN(metaRecord.id, MetaDataRecord::VALUE)) { - meta.value = true; - meta.val = &m_Values[(size_t)metaRecord.ops[1]]; + meta.isConstant = true; + meta.constant = &m_Constants[(size_t)metaRecord.ops[1]]; meta.type = &m_Types[(size_t)metaRecord.ops[0]]; } else if(IS_KNOWN(metaRecord.id, MetaDataRecord::NODE) || IS_KNOWN(metaRecord.id, MetaDataRecord::DISTINCT_NODE)) { if(IS_KNOWN(metaRecord.id, MetaDataRecord::DISTINCT_NODE)) - meta.distinct = true; + meta.isDistinct = true; for(uint64_t op : metaRecord.ops) meta.children.push_back(getMetaOrNull(op)); @@ -997,7 +997,7 @@ Program::Program(const byte *bytes, size_t length) Function &f = m_Functions[functionDecls[0]]; functionDecls.erase(0); - auto getValue = [this, &f](uint64_t v) { return GetFunctionValue(f, v); }; + auto getConstant = [this, &f](uint64_t v) { return GetFunctionConstant(f, v); }; auto getMeta = [this, &f](uint64_t v) { size_t idx = (size_t)v; return idx - 1 < m_Metadata.size() ? &m_Metadata[idx] : &f.metadata[idx]; @@ -1036,7 +1036,7 @@ Program::Program(const byte *bytes, size_t length) { if(IS_KNOWN(funcChild.id, KnownBlocks::CONSTANTS_BLOCK)) { - f.values.reserve(funcChild.children.size()); + f.constants.reserve(funcChild.children.size()); const Type *t = NULL; for(const LLVMBC::BlockOrRecord &constant : funcChild.children) @@ -1047,13 +1047,13 @@ Program::Program(const byte *bytes, size_t length) continue; } - ParseConstant( - constant, t, [this](uint64_t op) { return &m_Types[(size_t)op]; }, - [this](const Type *t) { return GetPointerType(t); }, getValue, - [this, &f](const Value &v) { - m_Symbols.push_back({SymbolType::Constant, m_Values.size() + f.values.size()}); - f.values.push_back(v); - }); + ParseConstant(constant, t, [this](uint64_t op) { return &m_Types[(size_t)op]; }, + [this](const Type *t) { return GetPointerType(t); }, getConstant, + [this, &f](const Constant &v) { + m_Symbols.push_back({SymbolType::Constant, + m_Constants.size() + f.constants.size()}); + f.constants.push_back(v); + }); } instrSymbolStart = m_Symbols.size(); @@ -1076,26 +1076,26 @@ Program::Program(const byte *bytes, size_t length) if(IS_KNOWN(metaRecord.id, MetaDataRecord::VALUE)) { - meta.value = true; + meta.isConstant = true; size_t idx = metaRecord.ops[1]; - if(idx < m_Values.size()) + if(idx < m_Constants.size()) { - // global value reference - meta.val = &m_Values[idx]; + // global constant reference + meta.constant = &m_Constants[idx]; } else { - idx -= m_Values.size(); - if(idx < f.values.size()) + idx -= m_Constants.size(); + if(idx < f.constants.size()) { - // function-local value reference - meta.val = &f.values[idx]; + // function-local constant reference + meta.constant = &f.constants[idx]; } else { // forward reference to instruction meta.func = &f; - meta.instruction = idx - f.values.size(); + meta.instruction = idx - f.constants.size(); } } meta.type = &m_Types[(size_t)metaRecord.ops[0]]; @@ -1135,10 +1135,10 @@ Program::Program(const byte *bytes, size_t length) { case SymbolType::Unknown: case SymbolType::Constant: - if(s.idx < m_Values.size()) + if(s.idx < m_Constants.size()) RDCERR("Unexpected local symbol referring to global value"); else - f.values[s.idx - m_Values.size()].str = symtab.getString(1); + f.constants[s.idx - m_Constants.size()].str = symtab.getString(1); break; case SymbolType::Argument: f.args[s.idx].name = symtab.getString(1); break; case SymbolType::Instruction: @@ -1498,7 +1498,7 @@ Program::Program(const byte *bytes, size_t length) Symbol s = inst.args[idx]; // if it's a struct the index must be constant RDCASSERT(s.type == SymbolType::Constant); - inst.type = inst.type->members[GetFunctionValue(f, s.idx)->val.uv[0]]; + inst.type = inst.type->members[GetFunctionConstant(f, s.idx)->val.uv[0]]; } else { @@ -2251,7 +2251,7 @@ uint32_t Program::GetOrAssignMetaID(Metadata *m) // assign meta IDs to the children now for(Metadata *c : m->children) { - if(!c || c->value) + if(!c || c->isConstant) continue; GetOrAssignMetaID(c); @@ -2281,10 +2281,10 @@ const Type *Program::GetSymbolType(const Function &f, Symbol s) switch(s.type) { case SymbolType::Constant: - if(s.idx < m_Values.size()) - ret = m_Values[s.idx].type; + if(s.idx < m_Constants.size()) + ret = m_Constants[s.idx].type; else - ret = f.values[s.idx - m_Values.size()].type; + ret = f.constants[s.idx - m_Constants.size()].type; break; case SymbolType::Argument: ret = f.funcType->members[s.idx]; break; case SymbolType::Instruction: ret = f.instructions[s.idx].type; break; @@ -2304,10 +2304,10 @@ const Type *Program::GetSymbolType(const Function &f, Symbol s) return ret; } -const Value *Program::GetFunctionValue(const Function &f, uint64_t v) +const Constant *Program::GetFunctionConstant(const Function &f, uint64_t v) { size_t idx = (size_t)v; - return idx < m_Values.size() ? &m_Values[idx] : &f.values[idx - m_Values.size()]; + return idx < m_Constants.size() ? &m_Constants[idx] : &f.constants[idx - m_Constants.size()]; } const Metadata *Program::GetFunctionMetadata(const Function &f, uint64_t v) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 8fca90c51..56771f9a8 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -204,14 +204,14 @@ struct Attributes rdcstr toString() const; }; -struct Value +struct Constant { const Type *type = NULL; ShaderValue val = {}; - rdcarray members; + rdcarray members; rdcstr str; bool undef = false, nullconst = false, symbol = false; - enum ValueOp : uint8_t + enum ConstantOp : uint8_t { NoOp = 0, GEP, @@ -278,9 +278,9 @@ struct Metadata ~Metadata(); uint32_t id = ~0U; - bool distinct = false, value = false; + bool isDistinct = false, isConstant = false; - const Value *val = NULL; + const Constant *constant = NULL; const Function *func = NULL; size_t instruction = ~0U; @@ -487,7 +487,7 @@ struct Function rdcarray instructions; rdcarray blocks; - rdcarray values; + rdcarray constants; rdcarray metadata; AttachedMetadata attachedMeta; @@ -525,7 +525,7 @@ private: uint32_t GetOrAssignMetaID(Metadata *m); uint32_t GetOrAssignMetaID(DebugLocation &l); const Type *GetSymbolType(const Function &f, Symbol s); - const Value *GetFunctionValue(const Function &f, uint64_t v); + const Constant *GetFunctionConstant(const Function &f, uint64_t v); const Metadata *GetFunctionMetadata(const Function &f, uint64_t v); const Type *GetVoidType(); const Type *GetBoolType(); @@ -548,7 +548,7 @@ private: rdcarray m_AttributeGroups; rdcarray m_Attributes; - rdcarray m_Values; + rdcarray m_Constants; rdcarray m_Metadata; rdcarray m_NamedMeta; diff --git a/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp b/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp index 0d18dcde0..51093669e 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp @@ -83,7 +83,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta if(id == MetaDataRecord::FILE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DIFile(getMeta(metaRecord.ops[1]), getMeta(metaRecord.ops[2])); meta.children = {getMeta(metaRecord.ops[1]), getMeta(metaRecord.ops[2])}; @@ -95,7 +95,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta // we expect it to be marked as distinct, but we'll always treat it that way RDCASSERT(metaRecord.ops[0] & 0x1); - meta.distinct = true; + meta.isDistinct = true; meta.dwarf = new DICompileUnit( DW_LANG(metaRecord.ops[1]), getMeta(metaRecord.ops[2]), getMetaString(metaRecord.ops[3]), @@ -109,7 +109,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::BASIC_TYPE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DIBasicType(DW_TAG(metaRecord.ops[1]), getMetaString(metaRecord.ops[2]), @@ -117,7 +117,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::DERIVED_TYPE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DIDerivedType(DW_TAG(metaRecord.ops[1]), getMetaString(metaRecord.ops[2]), getMeta(metaRecord.ops[3]), metaRecord.ops[4], @@ -130,7 +130,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::COMPOSITE_TYPE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); // TODO handle forward declarations? meta.dwarf = new DICompositeType( @@ -145,7 +145,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::TEMPLATE_TYPE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DITemplateTypeParameter(getMetaString(metaRecord.ops[1]), getMeta(metaRecord.ops[2])); @@ -154,7 +154,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::TEMPLATE_VALUE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DITemplateValueParameter(DW_TAG(metaRecord.ops[1]), getMetaString(metaRecord.ops[2]), @@ -164,7 +164,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::SUBPROGRAM) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DISubprogram( getMeta(metaRecord.ops[1]), getMetaString(metaRecord.ops[2]), @@ -181,7 +181,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::SUBROUTINE_TYPE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DISubroutineType(getMeta(metaRecord.ops[2])); @@ -189,7 +189,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::GLOBAL_VAR) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); uint64_t version = metaRecord.ops[0] >> 1; @@ -212,7 +212,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::LOCATION) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.debugLoc = new DebugLocation; meta.debugLoc->line = metaRecord.ops[1]; @@ -224,7 +224,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::LOCAL_VAR) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DILocalVariable( DW_TAG(metaRecord.ops[1]), getMeta(metaRecord.ops[2]), getMetaString(metaRecord.ops[3]), @@ -236,7 +236,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::LEXICAL_BLOCK) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DILexicalBlock(getMeta(metaRecord.ops[1]), getMeta(metaRecord.ops[2]), metaRecord.ops[3], metaRecord.ops[4]); @@ -245,7 +245,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta } else if(id == MetaDataRecord::SUBRANGE) { - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); meta.dwarf = new DISubrange(metaRecord.ops[1], LLVMBC::BitReader::svbr(metaRecord.ops[2])); } @@ -253,7 +253,7 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta { DIExpression *expr = new DIExpression; - meta.distinct = (metaRecord.ops[0] & 0x1); + meta.isDistinct = (metaRecord.ops[0] & 0x1); expr->op = DW_OP_none; diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 37741efcd..b4c400370 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -85,8 +85,8 @@ struct TypeOrderer if(m->type) accumulate(m->type); - if(m->val) - accumulate(m->val->type); + if(m->constant) + accumulate(m->constant->type); for(const Metadata *c : m->children) if(c) @@ -375,7 +375,7 @@ void Program::MakeDisassemblyString() typeOrderer.accumulate(g.type); if(g.initialiser.type == SymbolType::Constant) - typeOrderer.accumulate(m_Values[g.initialiser.idx].type); + typeOrderer.accumulate(m_Constants[g.initialiser.idx].type); } for(size_t i = 0; i < m_Functions.size(); i++) @@ -457,7 +457,7 @@ void Program::MakeDisassemblyString() m_Disassembly += "global "; if(g.initialiser.type == SymbolType::Constant) - m_Disassembly += m_Values[g.initialiser.idx].toString(true); + m_Disassembly += m_Constants[g.initialiser.idx].toString(true); else m_Disassembly += g.type->inner->toString(); @@ -481,7 +481,7 @@ void Program::MakeDisassemblyString() for(size_t i = 0; i < m_NamedMeta.size(); i++) { namedMeta += StringFormat::Fmt("!%s = %s!{", m_NamedMeta[i].name.c_str(), - m_NamedMeta[i].distinct ? "distinct " : ""); + m_NamedMeta[i].isDistinct ? "distinct " : ""); for(size_t m = 0; m < m_NamedMeta[i].children.size(); m++) { if(m != 0) @@ -516,10 +516,11 @@ void Program::MakeDisassemblyString() if(s.idx < m_Metadata.size()) { Metadata &m = m_Metadata[s.idx]; - if(m.value && m.val && m.val->symbol) - ret += m.val->toString(withTypes); - else if(m.value && m.val && (m.val->type->type == Type::Scalar || m.val->nullconst)) - ret += m.val->toString(withTypes); + if(m.isConstant && m.constant && m.constant->symbol) + ret += m.constant->toString(withTypes); + else if(m.isConstant && m.constant && + (m.constant->type->type == Type::Scalar || m.constant->nullconst)) + ret += m.constant->toString(withTypes); else ret += StringFormat::Fmt("!%u", GetOrAssignMetaID(&m)); } @@ -534,7 +535,9 @@ void Program::MakeDisassemblyString() ret = m_GlobalVars[s.idx].type->toString() + " "; ret += "@" + escapeStringIfNeeded(m_GlobalVars[s.idx].name); break; - case SymbolType::Constant: ret = GetFunctionValue(func, s.idx)->toString(withTypes); break; + case SymbolType::Constant: + ret = GetFunctionConstant(func, s.idx)->toString(withTypes); + break; case SymbolType::Argument: if(withTypes) ret = func.args[s.idx].type->toString() + " "; @@ -1194,7 +1197,7 @@ void Program::MakeDisassemblyString() { if(inst.args[0].type == SymbolType::Constant) { - uint32_t opcode = GetFunctionValue(func, inst.args[0].idx)->val.uv[0]; + uint32_t opcode = GetFunctionConstant(func, inst.args[0].idx)->val.uv[0]; if(opcode < ARRAY_COUNT(funcSigs)) { m_Disassembly += " ; "; @@ -1208,8 +1211,9 @@ void Program::MakeDisassemblyString() if(inst.args[2].type == SymbolType::Constant && inst.args[3].type == SymbolType::Constant) { ResourceClass resClass = - (ResourceClass)GetFunctionValue(func, inst.args[2].idx)->val.uv[0]; - ResourceKind resKind = (ResourceKind)GetFunctionValue(func, inst.args[3].idx)->val.uv[0]; + (ResourceClass)GetFunctionConstant(func, inst.args[2].idx)->val.uv[0]; + ResourceKind resKind = + (ResourceKind)GetFunctionConstant(func, inst.args[3].idx)->val.uv[0]; m_Disassembly += " resource: "; @@ -1217,7 +1221,7 @@ void Program::MakeDisassemblyString() uint32_t packedProps[2] = {}; - const Value *props = GetFunctionValue(func, inst.args[4].idx); + const Constant *props = GetFunctionConstant(func, inst.args[4].idx); if(props && !props->nullconst) { @@ -1386,9 +1390,9 @@ void Program::MakeDisassemblyString() { if(numIdx < m_NumberedMeta.size() && m_NumberedMeta[numIdx]->id == i) { - m_Disassembly += - StringFormat::Fmt("!%u = %s%s\n", i, m_NumberedMeta[numIdx]->distinct ? "distinct " : "", - m_NumberedMeta[numIdx]->valString().c_str()); + m_Disassembly += StringFormat::Fmt("!%u = %s%s\n", i, + m_NumberedMeta[numIdx]->isDistinct ? "distinct " : "", + m_NumberedMeta[numIdx]->valString().c_str()); if(m_NumberedMeta[numIdx]->dwarf) m_NumberedMeta[numIdx]->dwarf->setID(i); numIdx++; @@ -1552,7 +1556,7 @@ rdcstr Metadata::valString() const { return debugLoc->toString(); } - else if(value) + else if(isConstant) { if(type == NULL) { @@ -1560,11 +1564,11 @@ rdcstr Metadata::valString() const } else { - if(val) + if(constant) { - if(type != val->type) + if(type != constant->type) RDCERR("Type mismatch in metadata"); - return val->toString(true); + return constant->toString(true); } else { @@ -1594,7 +1598,7 @@ rdcstr Metadata::valString() const ret += ", "; if(!children[i]) ret += "null"; - else if(children[i]->value) + else if(children[i]->isConstant) ret += children[i]->valString(); else ret += StringFormat::Fmt("!%u", children[i]->id); @@ -1605,7 +1609,7 @@ rdcstr Metadata::valString() const } } -rdcstr Value::toString(bool withType) const +rdcstr Constant::toString(bool withType) const { if(type == NULL) return escapeString(str); @@ -1621,12 +1625,12 @@ rdcstr Value::toString(bool withType) const { ret += StringFormat::Fmt("@%s", escapeStringIfNeeded(str).c_str()); } - else if(op != Value::NoOp) + else if(op != Constant::NoOp) { switch(op) { - case Value::NoOp: break; - case Value::GEP: + case Constant::NoOp: break; + case Constant::GEP: { ret += "getelementptr inbounds ("; diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index ee230af8e..d6bd4ff01 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -88,7 +88,7 @@ enum class StructMemberAnnotation template T getival(const Metadata *m) { - return T(m->val->val.uv[0]); + return T(m->constant->val.uv[0]); } void Program::FetchComputeProperties(DXBC::Reflection *reflection) @@ -146,7 +146,7 @@ void Program::FetchComputeProperties(DXBC::Reflection *reflection) for(size_t t = 0; t < tags.children.size(); t += 2) { - RDCASSERT(tags.children[t]->value); + RDCASSERT(tags.children[t]->isConstant); if(getival(tags.children[t]) == ShaderTag::Compute) { Metadata &threadDim = *tags.children[t + 1]; @@ -187,7 +187,7 @@ D3D_PRIMITIVE_TOPOLOGY Program::GetOutputTopology() for(size_t t = 0; t < tags.children.size(); t += 2) { - RDCASSERT(tags.children[t]->value); + RDCASSERT(tags.children[t]->isConstant); if(getival(tags.children[t]) == ShaderTag::Geometry) { Metadata &geomData = *tags.children[t + 1]; @@ -558,7 +558,7 @@ static void AddResourceBind(DXBC::Reflection *refl, const TypeInfo &typeInfo, co uint32_t structStride = 0; for(size_t t = 0; tags && t < tags->children.size(); t += 2) { - RDCASSERT(tags->children[t]->value); + RDCASSERT(tags->children[t]->isConstant); if(getival(tags->children[t]) == SRVUAVTag::StructStride) { structStride = getival(tags->children[t + 1]);