@@ -1768,6 +1768,7 @@ void Debugger::FillDebugSourceVars(rdcarray<InstructionSourceInfo> &instInfo)
1768
1768
uint32_t childRows = 1U ;
1769
1769
uint32_t childColumns = 1U ;
1770
1770
VarType elementType = childType->type ;
1771
+ uint32_t elementSize = 1 ;
1771
1772
if (childType->matSize != 0 )
1772
1773
{
1773
1774
const TypeData &vec = m_DebugInfo.types [childType->baseType ];
@@ -1795,6 +1796,11 @@ void Debugger::FillDebugSourceVars(rdcarray<InstructionSourceInfo> &instInfo)
1795
1796
childRows = 1U ;
1796
1797
childColumns = vecColumns;
1797
1798
}
1799
+ else if (!childType->structMembers .empty ())
1800
+ {
1801
+ elementSize += childType->memberOffsets [childType->memberOffsets .count () - 1 ];
1802
+ }
1803
+ elementSize *= childRows * childColumns;
1798
1804
const uint32_t countDims = RDCMIN (arrayDimension, numIdxs);
1799
1805
// handle N dimensional arrays
1800
1806
for (uint32_t d = 0 ; d < countDims; ++d)
@@ -1817,7 +1823,7 @@ void Debugger::FillDebugSourceVars(rdcarray<InstructionSourceInfo> &instInfo)
1817
1823
usage->children [x].type = elementType;
1818
1824
usage->children [x].rows = childRows;
1819
1825
usage->children [x].columns = childColumns;
1820
- usage->children [x].offset = x ;
1826
+ usage->children [x].offset = usage-> offset + x * elementSize ;
1821
1827
}
1822
1828
}
1823
1829
RDCASSERTEQUAL (usage->children .size (), rows);
@@ -1851,7 +1857,7 @@ void Debugger::FillDebugSourceVars(rdcarray<InstructionSourceInfo> &instInfo)
1851
1857
usage->children [x].debugVar = usage->debugVar ;
1852
1858
usage->children [x].debugVarSuffix = usage->debugVarSuffix + suffix;
1853
1859
usage->children [x].name = usage->name + suffix;
1854
- usage->children [x].offset = x ;
1860
+ usage->children [x].offset = usage-> offset + typeWalk-> memberOffsets [x] ;
1855
1861
uint32_t memberRows = 1U ;
1856
1862
uint32_t memberColumns = 1U ;
1857
1863
const TypeData *memberType = &m_DebugInfo.types [typeWalk->structMembers [x].second ];
@@ -1946,7 +1952,7 @@ void Debugger::FillDebugSourceVars(rdcarray<InstructionSourceInfo> &instInfo)
1946
1952
usage->children [r].debugVarComponent = 0 ;
1947
1953
usage->children [r].rows = 1U ;
1948
1954
usage->children [r].columns = columns;
1949
- usage->children [r].offset = r ;
1955
+ usage->children [r].offset = usage-> offset + r * rows ;
1950
1956
usage->children [r].children .resize (columns);
1951
1957
for (uint32_t c = 0 ; c < columns; ++c)
1952
1958
{
@@ -1958,7 +1964,7 @@ void Debugger::FillDebugSourceVars(rdcarray<InstructionSourceInfo> &instInfo)
1958
1964
usage->children [r].children [c].debugVarComponent = r;
1959
1965
usage->children [r].children [c].rows = 1U ;
1960
1966
usage->children [r].children [c].columns = 1U ;
1961
- usage->children [r].children [c].offset = c;
1967
+ usage->children [r].children [c].offset = usage-> children [r]. offset + c;
1962
1968
}
1963
1969
}
1964
1970
}
@@ -2099,7 +2105,7 @@ void Debugger::FillDebugSourceVars(rdcarray<InstructionSourceInfo> &instInfo)
2099
2105
usage->children [x].debugVarComponent = x;
2100
2106
usage->children [x].rows = 1U ;
2101
2107
usage->children [x].columns = 1U ;
2102
- usage->children [x].offset = x;
2108
+ usage->children [x].offset = usage-> offset + x;
2103
2109
}
2104
2110
usage->emitSourceVar = false ;
2105
2111
}
@@ -3982,6 +3988,14 @@ void Debugger::RegisterOp(Iter it)
3982
3988
3983
3989
break ;
3984
3990
}
3991
+ case ShaderDbg::TypeMember:
3992
+ {
3993
+ rdcstr name = strings[dbg.arg <Id>(0 )];
3994
+ Id type = dbg.arg <Id>(1 );
3995
+ uint32_t offset = EvaluateConstant (dbg.arg <Id>(4 ), {}).value .u32v [0 ];
3996
+ (void )offset;
3997
+ break ;
3998
+ }
3985
3999
case ShaderDbg::TypeComposite:
3986
4000
{
3987
4001
rdcstr name = strings[dbg.arg <Id>(0 )];
@@ -4004,8 +4018,26 @@ void Debugger::RegisterOp(Iter it)
4004
4018
{
4005
4019
OpShaderDbg member (GetID (dbg.arg <Id>(i)));
4006
4020
4007
- m_DebugInfo.types [dbg.result ].structMembers .push_back (
4008
- {strings[member.arg <Id>(0 )], member.arg <Id>(1 )});
4021
+ rdcstr memberName;
4022
+ Id memberType;
4023
+ uint32_t memberOffset = 0 ;
4024
+ switch (member.inst )
4025
+ {
4026
+ case ShaderDbg::TypeMember:
4027
+ memberName = strings[member.arg <Id>(0 )];
4028
+ memberType = member.arg <Id>(1 );
4029
+ memberOffset = EvaluateConstant (member.arg <Id>(5 ), {}).value .u32v [0 ];
4030
+ break ;
4031
+ case ShaderDbg::TypeFunction:
4032
+ memberName = strings[member.arg <Id>(0 )];
4033
+ memberType = member.arg <Id>(1 );
4034
+ break ;
4035
+ case ShaderDbg::TypeInheritance: memberName = " Inheritence" ; break ;
4036
+ default : RDCERR (" Unhandled DebugTypeComposite entry %u" , member.inst );
4037
+ }
4038
+
4039
+ m_DebugInfo.types [dbg.result ].structMembers .push_back ({memberName, memberType});
4040
+ m_DebugInfo.types [dbg.result ].memberOffsets .push_back (memberOffset);
4009
4041
}
4010
4042
4011
4043
name = tagString[tag % 3 ] + name;
0 commit comments