mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-16 15:00:47 +00:00
c8a518f05c
* rdcstr no longer inherits from rdcarray, it implements all functionality itself. * There are now three representations: - Heap-allocated, same as how rdcarray behaves. - Local-allocated, for small strings we store them in a union array. - Compile-time literal, only created from user-defined literals. * The main observation is that a lot of RenderDoc's strings are compile-time literals either from struct names, member names, or stringified enum values. Storing these directly and allowing them to be moved and copied quickly saves on allocations and time. When the string is modified, it's copied to one of the other formats.
102 lines
5.4 KiB
XML
102 lines
5.4 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
|
<Type Name="rdcstr">
|
|
<DisplayString Condition="d.fixed.flags & rdcstr::FIXED_STATE">{d.fixed.str,s}</DisplayString>
|
|
<DisplayString Condition="d.fixed.flags & rdcstr::ALLOC_STATE">{d.alloc.str,s}</DisplayString>
|
|
<DisplayString>{d.arr.str,s}</DisplayString>
|
|
<StringView Condition="d.fixed.flags & rdcstr::FIXED_STATE">d.fixed.str,s</StringView>
|
|
<StringView Condition="d.fixed.flags & rdcstr::ALLOC_STATE">d.alloc.str,s</StringView>
|
|
<StringView>d.arr.str,s</StringView>
|
|
<Expand>
|
|
<Synthetic Name="[mode]" Condition="d.fixed.flags & rdcstr::FIXED_STATE">
|
|
<DisplayString>Compile-Time Literal</DisplayString>
|
|
</Synthetic>
|
|
<Item Name="[size]" ExcludeView="simple" Condition="d.fixed.flags & rdcstr::FIXED_STATE">d.fixed.size</Item>
|
|
<Item Name="[capacity]" ExcludeView="simple" Condition="d.fixed.flags & rdcstr::FIXED_STATE">"N/A"</Item>
|
|
<ArrayItems Condition="d.fixed.flags & rdcstr::FIXED_STATE">
|
|
<Size>d.fixed.size</Size>
|
|
<ValuePointer>d.fixed.str</ValuePointer>
|
|
</ArrayItems>
|
|
|
|
<Synthetic Name="[mode]" Condition="d.fixed.flags & rdcstr::ALLOC_STATE">
|
|
<DisplayString>Heap-allocated String</DisplayString>
|
|
</Synthetic>
|
|
<Item Name="[size]" ExcludeView="simple" Condition="d.fixed.flags & rdcstr::ALLOC_STATE">d.alloc.size</Item>
|
|
<Item Name="[capacity]" ExcludeView="simple" Condition="d.fixed.flags & rdcstr::ALLOC_STATE">d.alloc._capacity</Item>
|
|
<ArrayItems Condition="d.fixed.flags & rdcstr::ALLOC_STATE">
|
|
<Size>d.alloc.size</Size>
|
|
<ValuePointer>d.alloc.str</ValuePointer>
|
|
</ArrayItems>
|
|
|
|
<Synthetic Name="[mode]" Condition="(d.fixed.flags & (rdcstr::ALLOC_STATE|rdcstr::FIXED_STATE)) == 0">
|
|
<DisplayString>Internal Array Small String</DisplayString>
|
|
</Synthetic>
|
|
<Item Name="[size]" ExcludeView="simple" Condition="(d.fixed.flags & (rdcstr::ALLOC_STATE|rdcstr::FIXED_STATE)) == 0">d.arr._size</Item>
|
|
<Item Name="[capacity]" ExcludeView="simple" Condition="(d.fixed.flags & (rdcstr::ALLOC_STATE|rdcstr::FIXED_STATE)) == 0">d.arr.capacity</Item>
|
|
<ArrayItems Condition="(d.fixed.flags & (rdcstr::ALLOC_STATE|rdcstr::FIXED_STATE)) == 0">
|
|
<Size>d.arr._size</Size>
|
|
<ValuePointer>d.arr.str</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
<Type Name="rdcarray<*>">
|
|
<DisplayString>{{ size={usedCount} }}</DisplayString>
|
|
<Expand>
|
|
<Item Name="[size]" ExcludeView="simple">usedCount</Item>
|
|
<Item Name="[capacity]" ExcludeView="simple">allocatedCount</Item>
|
|
<ArrayItems>
|
|
<Size>usedCount</Size>
|
|
<ValuePointer>elems</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
<Type Name="rdcpair<*>">
|
|
<DisplayString>{{ {first}, {second} }}</DisplayString>
|
|
<Expand>
|
|
<Item Name="first" ExcludeView="simple">first</Item>
|
|
<Item Name="second" ExcludeView="simple">second</Item>
|
|
</Expand>
|
|
</Type>
|
|
<Type Name="SDType">
|
|
<DisplayString>{name}</DisplayString>
|
|
<Expand>
|
|
<Item Name="name">name</Item>
|
|
<Item Name="basetype">basetype</Item>
|
|
<Item Name="byteSize">byteSize</Item>
|
|
<Item Name="flags">flags</Item>
|
|
</Expand>
|
|
</Type>
|
|
<Type Name="SDObject">
|
|
<DisplayString Condition="type.flags & SDTypeFlags::HasCustomString">{name} = {data.str}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::String">{name} = {data.str}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::UnsignedInteger">{name} = {data.basic.u}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::SignedInteger">{name} = {data.basic.i}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::Float">{name} = {data.basic.d}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::Boolean">{name} = {data.basic.b}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::Character">{name} = {data.basic.c}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::Resource">{name} = {data.basic.id}</DisplayString>
|
|
<DisplayString Condition="type.basetype == SDBasic::Array">{name} = {type.name}[]</DisplayString>
|
|
<DisplayString>SDObject: {type.name} {name}</DisplayString>
|
|
<Expand>
|
|
<Item Condition="type.basetype == SDBasic::Array" Name="[size]" ExcludeView="simple">data.children.usedCount</Item>
|
|
<ArrayItems Condition="type.basetype == SDBasic::Array || type.basetype == SDBasic::Struct">
|
|
<Size>data.children.usedCount</Size>
|
|
<ValuePointer>data.children.elems</ValuePointer>
|
|
</ArrayItems>
|
|
<Item Condition="type.basetype != SDBasic::Array && type.basetype != SDBasic::Struct" Name="type">type</Item>
|
|
<Item Condition="type.basetype != SDBasic::Array && type.basetype != SDBasic::Struct" Name="name">name</Item>
|
|
<Item Condition="type.basetype != SDBasic::Array && type.basetype != SDBasic::Struct" Name="data">data</Item>
|
|
</Expand>
|
|
</Type>
|
|
<Type Name="SDChunk">
|
|
<DisplayString>SDChunk: {name} ({metadata.chunkID})</DisplayString>
|
|
<Expand>
|
|
<Item Name="metadata" ExcludeView="simple">metadata</Item>
|
|
<Item Name="[size]" ExcludeView="simple">data.children.usedCount</Item>
|
|
<ArrayItems>
|
|
<Size>data.children.usedCount</Size>
|
|
<ValuePointer>data.children.elems</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
</AutoVisualizer> |