mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-23 06:56:40 +00:00
Save address space in pointer types
This commit is contained in:
@@ -741,9 +741,7 @@ Program::Program(const byte *bytes, size_t length)
|
||||
{
|
||||
m_Types[typeIndex].type = Type::Pointer;
|
||||
m_Types[typeIndex].inner = &m_Types[(size_t)typ.ops[0]];
|
||||
|
||||
if(typ.ops.size() > 1 && typ.ops[1] != 0)
|
||||
RDCERR("Ignoring address space on pointer type");
|
||||
m_Types[typeIndex].addrSpace = Type::PointerAddrSpace(typ.ops[1]);
|
||||
|
||||
typeIndex++;
|
||||
}
|
||||
|
||||
@@ -62,12 +62,27 @@ struct Type
|
||||
Int,
|
||||
} scalarType = Void;
|
||||
|
||||
enum PointerAddrSpace
|
||||
{
|
||||
Default = 0,
|
||||
DeviceMemory = 1,
|
||||
CBuffer = 2,
|
||||
GroupShared = 3,
|
||||
GenericPointer = 4,
|
||||
ImmediateCBuffer = 5,
|
||||
};
|
||||
|
||||
bool isVoid() const { return type == Scalar && scalarType == Void; }
|
||||
rdcstr toString() const;
|
||||
rdcstr declFunction(rdcstr funcName) const;
|
||||
|
||||
// for scalars, arrays, vectors
|
||||
uint32_t bitWidth = 0, elemCount = 0;
|
||||
// for scalars, arrays, vectors, pointers
|
||||
union
|
||||
{
|
||||
uint32_t bitWidth = 0;
|
||||
PointerAddrSpace addrSpace;
|
||||
};
|
||||
uint32_t elemCount = 0;
|
||||
|
||||
// the single inner type for pointers, vectors, or arrays, the return type for functions
|
||||
const Type *inner = NULL;
|
||||
|
||||
@@ -340,12 +340,16 @@ void Program::MakeDisassemblyString()
|
||||
m_Disassembly += "external ";
|
||||
else
|
||||
m_Disassembly += "internal ";
|
||||
if(g.type->addrSpace)
|
||||
m_Disassembly += StringFormat::Fmt("addrspace(%d) ", g.type->addrSpace);
|
||||
if(g.flags & GlobalFlags::LocalUnnamedAddr)
|
||||
m_Disassembly += "local_unnamed_addr ";
|
||||
else if(g.flags & GlobalFlags::GlobalUnnamedAddr)
|
||||
m_Disassembly += "unnamed_addr ";
|
||||
if(g.flags & GlobalFlags::IsConst)
|
||||
m_Disassembly += "constant ";
|
||||
else
|
||||
m_Disassembly += "global ";
|
||||
|
||||
if(g.initialiser.type == SymbolType::Constant)
|
||||
m_Disassembly += m_Values[g.initialiser.idx].toString(true);
|
||||
@@ -1041,16 +1045,20 @@ rdcstr Type::toString() const
|
||||
}
|
||||
}
|
||||
case Vector: return StringFormat::Fmt("<%u x %s>", elemCount, inner->toString().c_str());
|
||||
case Pointer: return StringFormat::Fmt("%s*", inner->toString().c_str());
|
||||
case Pointer:
|
||||
if(addrSpace == 0)
|
||||
return StringFormat::Fmt("%s*", inner->toString().c_str());
|
||||
else
|
||||
return StringFormat::Fmt("%s addrspace(%d)*", inner->toString().c_str(), addrSpace);
|
||||
case Array: return StringFormat::Fmt("[%u x %s]", elemCount, inner->toString().c_str());
|
||||
case Function: return declFunction(rdcstr());
|
||||
case Struct:
|
||||
{
|
||||
rdcstr ret;
|
||||
if(packedStruct)
|
||||
ret = "<{";
|
||||
ret = "<{ ";
|
||||
else
|
||||
ret = "{";
|
||||
ret = "{ ";
|
||||
for(size_t i = 0; i < members.size(); i++)
|
||||
{
|
||||
if(i > 0)
|
||||
@@ -1058,9 +1066,9 @@ rdcstr Type::toString() const
|
||||
ret += members[i]->toString();
|
||||
}
|
||||
if(packedStruct)
|
||||
ret += "}>";
|
||||
ret += " }>";
|
||||
else
|
||||
ret += "}";
|
||||
ret += " }";
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user