@@ -3376,27 +3376,34 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection)
33763376 rdcstr resName = GetHandleAlias (handleStr);
33773377 if (!resName.isEmpty ())
33783378 {
3379- lineStr += resName;
33803379 if (!isUndef (inst.args [2 ]))
33813380 {
3382- lineStr += " [" + ArgToString (inst.args [2 ], false ) + " ]" ;
3381+ rdcstr arrayStr = resName + " [" + ArgToString (inst.args [2 ], false ) + " ]" ;
33833382 if (!isUndef (inst.args [3 ]))
33843383 {
3384+ // *(&<resName>[<index>] + <elementOffset> bytes)
33853385 uint32_t elementOffset;
33863386 if (getival<uint32_t >(inst.args [3 ], elementOffset))
33873387 {
33883388 if (elementOffset > 0 )
3389- lineStr += " + " + ToStr (elementOffset) + " bytes" ;
3389+ lineStr += " *(&" + arrayStr + " + " + ToStr (elementOffset) + " bytes)" ;
3390+ else
3391+ lineStr += arrayStr;
33903392 }
33913393 else
33923394 {
3393- lineStr += " + " + ArgToString (inst.args [3 ], false ) + " bytes" ;
3395+ lineStr +=
3396+ " *(&" + arrayStr + " + " + ArgToString (inst.args [3 ], false ) + " bytes)" ;
33943397 }
33953398 }
3399+ else
3400+ {
3401+ lineStr += arrayStr;
3402+ }
33963403 }
33973404 else
33983405 {
3399- lineStr += " [" + ArgToString (inst.args [3 ], false ) + " ]" ;
3406+ lineStr += resName + " [" + ArgToString (inst.args [3 ], false ) + " ]" ;
34003407 }
34013408 }
34023409 else
@@ -3418,29 +3425,37 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection)
34183425 bool validElementOffset = !isUndef (inst.args [3 ]);
34193426 bool constantElementOffset = validElementOffset && getival (inst.args [3 ], offset);
34203427
3421- lineStr + = resName;
3428+ rdcstr arrayStr = resName;
34223429 uint32_t index;
34233430 if (getival (inst.args [2 ], index))
34243431 {
34253432 if ((offset == 0 ) || (index > 0 ))
3426- lineStr += " [" + ToStr (index) + " ]" ;
3433+ arrayStr += " [" + ToStr (index) + " ]" ;
34273434 }
34283435 else
34293436 {
3430- lineStr += " [" + ArgToString (inst.args [2 ], false ) + " ]" ;
3437+ arrayStr += " [" + ArgToString (inst.args [2 ], false ) + " ]" ;
34313438 }
34323439 if (validElementOffset)
34333440 {
3441+ // *(&<resName>[<index>] + <elementOffset> bytes)
34343442 if (constantElementOffset)
34353443 {
34363444 if (offset > 0 )
3437- lineStr += " + " + ToStr (offset) + " bytes" ;
3445+ lineStr = " *(&" + arrayStr + " + " + ToStr (offset) + " bytes)" ;
3446+ else
3447+ lineStr += arrayStr;
34383448 }
34393449 else
34403450 {
3441- lineStr += " + " + ArgToString (inst.args [3 ], false ) + " bytes" ;
3451+ lineStr +=
3452+ " *(&" + arrayStr + " + " + ArgToString (inst.args [3 ], false ) + " bytes)" ;
34423453 }
34433454 }
3455+ else
3456+ {
3457+ lineStr += arrayStr;
3458+ }
34443459 lineStr += " = " ;
34453460 lineStr += " {" ;
34463461 bool needComma = false ;
@@ -4045,27 +4060,23 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection)
40454060
40464061 switch (addrspace)
40474062 {
4048- case DXIL::Type::PointerAddrSpace::Default: lineStr = " " ; break ;
4063+ case DXIL::Type::PointerAddrSpace::Default: resultTypeStr = " " ; break ;
40494064 case DXIL::Type::PointerAddrSpace::DeviceMemory:
4050- lineStr = " DeviceMemory" ;
4065+ resultTypeStr = " DeviceMemory" ;
40514066 break ;
4052- case DXIL::Type::PointerAddrSpace::CBuffer: lineStr = " CBuffer" ; break ;
4053- case DXIL::Type::PointerAddrSpace::GroupShared: lineStr = " GroupShared" ; break ;
4054- case DXIL::Type::PointerAddrSpace::GenericPointer: lineStr = " " ; break ;
4067+ case DXIL::Type::PointerAddrSpace::CBuffer: resultTypeStr = " CBuffer" ; break ;
4068+ case DXIL::Type::PointerAddrSpace::GroupShared:
4069+ resultTypeStr = " GroupShared" ;
4070+ break ;
4071+ case DXIL::Type::PointerAddrSpace::GenericPointer: resultTypeStr = " " ; break ;
40554072 case DXIL::Type::PointerAddrSpace::ImmediateCBuffer:
4056- lineStr = " ImmediateCBuffer" ;
4073+ resultTypeStr = " ImmediateCBuffer" ;
40574074 break ;
40584075 };
40594076
4060- lineStr += " " ;
4061- lineStr += scalarType;
4062- lineStr += " * " ;
4063-
4064- if (!inst.getName ().empty ())
4065- lineStr += StringFormat::Fmt (" %c%s = " , DXIL::dxilIdentifier,
4066- escapeStringIfNeeded (inst.getName ()).c_str ());
4067- else if (inst.slot != ~0U )
4068- lineStr += StringFormat::Fmt (" %c%u = " , DXIL::dxilIdentifier, inst.slot );
4077+ resultTypeStr += " " ;
4078+ resultTypeStr += scalarType;
4079+ resultTypeStr += " * " ;
40694080
40704081 // arg[0] : ptr
40714082 rdcstr ptrStr = ArgToString (inst.args [0 ], false );
0 commit comments