Fixup display&export of byte address and structured (with/no counter)

This commit is contained in:
baldurk
2016-06-23 11:46:32 +02:00
parent bbce7478de
commit f00049bed3
4 changed files with 72 additions and 18 deletions
+1 -1
View File
@@ -137,7 +137,7 @@ namespace renderdoc
public UInt32 NumElements;
// BufferEx
public UInt32 Flags;
public D3D11BufferViewFlags Flags;
// Texture
public UInt32 HighestMip;
+8
View File
@@ -287,6 +287,14 @@ namespace renderdoc
SwapBuffer = 0x10,
};
[Flags]
public enum D3D11BufferViewFlags
{
Raw = 0x1,
Append = 0x2,
Counter = 0x4,
};
public enum ShaderStageType
{
Vertex = 0,
@@ -332,7 +332,18 @@ namespace renderdocui.Windows.PipelineState
// for structured buffers, display how many 'elements' there are in the buffer
if (bufs[t].structureSize > 0)
{
typename = "StructuredBuffer[" + (bufs[t].length / bufs[t].structureSize) + "]";
}
else if (r.Flags.HasFlag(D3D11BufferViewFlags.Raw))
{
typename = "ByteAddressBuffer";
}
if (r.Flags.HasFlag(D3D11BufferViewFlags.Append) || r.Flags.HasFlag(D3D11BufferViewFlags.Counter))
{
typename += " (Count: " + r.BufferStructCount + ")";
}
// get the buffer type, whether it's just a basic type or a complex struct
if (shaderInput != null && !shaderInput.IsTexture)
@@ -1011,9 +1022,15 @@ namespace renderdocui.Windows.PipelineState
typename = "Buffer";
if (bufs[t].structureSize > 0)
typename = "StructuredBuffer[" + (bufs[t].length / bufs[t].structureSize) + "]";
{
typename = "RWStructuredBuffer[" + (bufs[t].length / bufs[t].structureSize) + "]";
}
else if (r.Flags.HasFlag(D3D11BufferViewFlags.Raw))
{
typename = "RWByteAddressBuffer";
}
if (r.Structured)
if (r.Flags.HasFlag(D3D11BufferViewFlags.Append) || r.Flags.HasFlag(D3D11BufferViewFlags.Counter))
{
typename += " (Count: " + r.BufferStructCount + ")";
}
@@ -1336,9 +1353,15 @@ namespace renderdocui.Windows.PipelineState
typename = "Buffer";
if (bufs[t].structureSize > 0)
typename = "StructuredBuffer[" + (bufs[t].length / bufs[t].structureSize) + "]";
{
typename = "RWStructuredBuffer[" + (bufs[t].length / bufs[t].structureSize) + "]";
}
else if (r.Flags.HasFlag(D3D11BufferViewFlags.Raw))
{
typename = "RWByteAddressBuffer";
}
if (r.Structured)
if (r.Flags.HasFlag(D3D11BufferViewFlags.Append) || r.Flags.HasFlag(D3D11BufferViewFlags.Counter))
{
typename += " (Count: " + r.BufferStructCount + ")";
}
@@ -2566,13 +2589,24 @@ namespace renderdocui.Windows.PipelineState
ShaderResource shaderInput = null;
bool rw = false;
if (refl != null)
{
foreach (var bind in refl.ReadOnlyResources)
{
if (bind.bindPoint == i)
{
shaderInput = bind;
break;
}
}
foreach (var bind in refl.ReadWriteResources)
{
if (bind.bindPoint == i)
{
shaderInput = bind;
rw = true;
break;
}
}
@@ -2583,6 +2617,8 @@ namespace renderdocui.Windows.PipelineState
string format = "Unknown";
uint w = 0, h = 0, d = 0, a = 0;
string viewFormat = view.Format.ToString();
FetchTexture tex = null;
FetchBuffer buf = null;
@@ -2618,9 +2654,15 @@ namespace renderdocui.Windows.PipelineState
// for structured buffers, display how many 'elements' there are in the buffer
if (bufs[t].structureSize > 0)
typename = "StructuredBuffer[" + (bufs[t].length / bufs[t].structureSize) + "]";
{
typename = (rw ? "RWStructuredBuffer" : "StructuredBuffer") + "[" + (bufs[t].length / bufs[t].structureSize) + "]";
}
else if (view.Flags.HasFlag(D3D11BufferViewFlags.Raw))
{
typename = rw ? "RWByteAddressBuffer" : "ByteAddressBuffer";
}
if (view.Structured)
if (view.Flags.HasFlag(D3D11BufferViewFlags.Append) || view.Flags.HasFlag(D3D11BufferViewFlags.Counter))
{
typename += " (Count: " + view.BufferStructCount + ")";
}
@@ -2630,9 +2672,9 @@ namespace renderdocui.Windows.PipelineState
if (view.Format.compType == FormatComponentType.None)
{
if (shaderInput.variableType.members.Length > 0)
format = "struct " + shaderInput.variableType.Name;
viewFormat = format = "struct " + shaderInput.variableType.Name;
else
format = shaderInput.variableType.Name;
viewFormat = format = shaderInput.variableType.Name;
}
else
{
@@ -2673,7 +2715,7 @@ namespace renderdocui.Windows.PipelineState
i, name,
view.Type, typename,
w, h, d, a,
view.Format, format,
viewFormat, format,
viewParams };
}
@@ -2817,7 +2859,7 @@ namespace renderdocui.Windows.PipelineState
{
if (sh.SRVs[i].View == ResourceId.Null) continue;
rows.Add(ExportViewHTML(sh.SRVs[i], i, null, ""));
rows.Add(ExportViewHTML(sh.SRVs[i], i, sh.ShaderDetails, ""));
}
ExportHTMLTable(writer,
@@ -2843,7 +2885,7 @@ namespace renderdocui.Windows.PipelineState
{
if (sh.UAVs[i].View == ResourceId.Null) continue;
rows.Add(ExportViewHTML(sh.UAVs[i], i, null, ""));
rows.Add(ExportViewHTML(sh.UAVs[i], i, sh.ShaderDetails, ""));
}
ExportHTMLTable(writer,