From c77261f0f383469d64ad67b6cd9fd8d2f79e79e6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 25 May 2022 17:10:57 +0100 Subject: [PATCH] Display struct/enum typenames when available in buffer viewer --- qrenderdoc/Code/BufferFormatter.cpp | 19 +++++++++++++------ qrenderdoc/Code/QRDUtils.h | 2 +- qrenderdoc/Windows/BufferViewer.cpp | 5 +++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/qrenderdoc/Code/BufferFormatter.cpp b/qrenderdoc/Code/BufferFormatter.cpp index 2ee08eb87..dcc75811f 100644 --- a/qrenderdoc/Code/BufferFormatter.cpp +++ b/qrenderdoc/Code/BufferFormatter.cpp @@ -3459,20 +3459,27 @@ QVariantList GetVariants(ResourceFormat format, const ShaderConstant &var, const return ret; } -QString TypeString(const ShaderVariable &v) +QString TypeString(const ShaderVariable &v, const ShaderConstant &c) { - if(!v.members.isEmpty() || v.type == VarType::Struct) + if(!v.members.isEmpty() || v.type == VarType::Struct || v.type == VarType::Enum) { - if(v.type == VarType::Struct) + if(v.type == VarType::Struct || v.type == VarType::Enum) { + QString structName = v.type == VarType::Struct ? lit("struct") : lit("enum"); + + if(c.type.baseType == v.type && !c.type.name.empty()) + structName = c.type.name; + if(!v.members.empty() && v.members[0].name.contains('[')) - return lit("struct[%2]").arg(v.members.count()); + return lit("%1[%2]").arg(structName).arg(v.members.count()); else - return lit("struct"); + return lit("%1").arg(structName); } else { - return QFormatStr("%1[%2]").arg(TypeString(v.members[0])).arg(v.members.count()); + return QFormatStr("%1[%2]") + .arg(TypeString(v.members[0], c.type.members.empty() ? c : c.type.members[0])) + .arg(v.members.count()); } } diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index e8920ac47..3d77d0abd 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -242,7 +242,7 @@ void SetInterpretedResourceFormat(ShaderConstant &elem, ResourceFormatType inter CompType interpretCompType); ShaderVariable InterpretShaderVar(const ShaderConstant &elem, const byte *data, const byte *end); -QString TypeString(const ShaderVariable &v); +QString TypeString(const ShaderVariable &v, const ShaderConstant &c = ShaderConstant()); QString RowString(const ShaderVariable &v, uint32_t row, VarType type = VarType::Unknown); QString VarString(const ShaderVariable &v, const ShaderConstant &c); QString RowTypeString(const ShaderVariable &v); diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index c43d34347..25b25eb04 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -3440,7 +3440,8 @@ void BufferViewer::UI_AddFixedVariables(RDTreeWidgetItem *root, uint32_t baseOff QFormatStr(" (bits %1:%2)").arg(c.bitFieldOffset).arg(c.bitFieldOffset + c.bitFieldSize); } - RDTreeWidgetItem *n = new RDTreeWidgetItem({v.name, VarString(v, c), offsetStr, TypeString(v)}); + RDTreeWidgetItem *n = + new RDTreeWidgetItem({v.name, VarString(v, c), offsetStr, TypeString(v, c)}); n->setTag(QVariant::fromValue(FixedVarTag(v.name, baseOffset + c.byteOffset))); @@ -3463,7 +3464,7 @@ void BufferViewer::UI_AddFixedVariables(RDTreeWidgetItem *root, uint32_t baseOff const uint32_t elOffset = baseOffset + c.byteOffset + c.type.arrayByteStride * e; RDTreeWidgetItem *el = new RDTreeWidgetItem( - {v.members[e].name, VarString(v.members[e], c), elOffset, TypeString(v.members[e])}); + {v.members[e].name, VarString(v.members[e], c), elOffset, TypeString(v.members[e], c)}); el->setTag(QVariant::fromValue(FixedVarTag(v.members[e].name, elOffset)));