From 10da3b73ae491d8b257262e66b9ae389e46ef1fd Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 9 Jun 2020 12:16:57 +0100 Subject: [PATCH] Add support for DISubrange --- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 1 + renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp | 16 ++++++++++++++++ renderdoc/driver/shaders/dxil/dxil_debuginfo.h | 14 ++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 115ec36f6..4f1d290f2 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -205,6 +205,7 @@ struct DIBase LocalVariable, Expression, LexicalBlock, + Subrange, } type; DIBase(Type t) : type(t) {} diff --git a/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp b/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp index 4536e8d08..d046ca3a2 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp @@ -234,6 +234,12 @@ bool Program::ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Meta meta.children = {getMeta(metaRecord.ops[1]), getMeta(metaRecord.ops[2])}; } + else if(id == MetaDataRecord::SUBRANGE) + { + meta.distinct = (metaRecord.ops[0] & 0x1); + + meta.dwarf = new DISubrange(metaRecord.ops[1], LLVMBC::BitReader::svbr(metaRecord.ops[2])); + } else if(id == MetaDataRecord::EXPRESSION) { DIExpression *expr = new DIExpression; @@ -544,6 +550,16 @@ rdcstr DILexicalBlock::toString() const return ret; } +rdcstr DISubrange::toString() const +{ + rdcstr ret = "!DISubrange("; + ret += StringFormat::Fmt("count: %llu", count); + if(lowerBound) + ret += StringFormat::Fmt(", lowerBound: %lld", lowerBound); + ret += ")"; + return ret; +} + }; // namespace DXIL template <> diff --git a/renderdoc/driver/shaders/dxil/dxil_debuginfo.h b/renderdoc/driver/shaders/dxil/dxil_debuginfo.h index b6b7b3ab0..bae23fa81 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debuginfo.h +++ b/renderdoc/driver/shaders/dxil/dxil_debuginfo.h @@ -695,6 +695,20 @@ struct DILexicalBlock : public DIBase virtual rdcstr toString() const; }; +struct DISubrange : public DIBase +{ + static const DIBase::Type DIType = DIBase::Subrange; + DISubrange(uint64_t count, int64_t lowerBound) + : DIBase(DIType), count(count), lowerBound(lowerBound) + { + } + + uint64_t count; + int64_t lowerBound; + + virtual rdcstr toString() const; +}; + }; // namespace DXIL DECLARE_REFLECTION_ENUM(DXIL::DW_LANG);