Skip to content

Commit 44fdde8

Browse files
committed
DXIL Disassembly tweaks to getelementptr, RawBufferLoad, RawBufferStore
Fixed getelementptr showing raw type and converted type Improved RawBufferLoad, RawBufferStore display when displaying byteOffset
1 parent 1a36875 commit 44fdde8

File tree

1 file changed

+36
-25
lines changed

1 file changed

+36
-25
lines changed

renderdoc/driver/shaders/dxil/dxil_disassemble.cpp

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)