Display struct/enum typenames when available in buffer viewer

This commit is contained in:
baldurk
2022-05-25 17:10:57 +01:00
parent d44d9e4857
commit c77261f0f3
3 changed files with 17 additions and 9 deletions
+13 -6
View File
@@ -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());
}
}
+1 -1
View File
@@ -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);
+3 -2
View File
@@ -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)));