mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-23 23:16:31 +00:00
Omit large ranges of empty resources in arrays in D3D12 pipeline state
This commit is contained in:
@@ -268,6 +268,8 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
res->setHeader(header);
|
||||
|
||||
header->setResizeContentsPrecision(20);
|
||||
|
||||
res->setColumns({tr("Root Sig El"), tr("Space"), tr("Register"), tr("Resource"), tr("Type"),
|
||||
tr("Width"), tr("Height"), tr("Depth"), tr("Array Size"), tr("Format"),
|
||||
tr("Go")});
|
||||
@@ -283,6 +285,8 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
uav->setHeader(header);
|
||||
|
||||
header->setResizeContentsPrecision(20);
|
||||
|
||||
uav->setColumns({tr("Root Sig El"), tr("Space"), tr("Register"), tr("Resource"), tr("Type"),
|
||||
tr("Width"), tr("Height"), tr("Depth"), tr("Array Size"), tr("Format"),
|
||||
tr("Go")});
|
||||
@@ -298,6 +302,8 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
samp->setHeader(header);
|
||||
|
||||
header->setResizeContentsPrecision(20);
|
||||
|
||||
samp->setColumns({tr("Root Sig El"), tr("Space"), tr("Register"), tr("Addressing"),
|
||||
tr("Filter"), tr("LOD Clamp"), tr("LOD Bias")});
|
||||
header->setColumnStretchHints({1, 1, 2, 2, 2, 2, 2});
|
||||
@@ -311,6 +317,8 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
cbuffer->setHeader(header);
|
||||
|
||||
header->setResizeContentsPrecision(20);
|
||||
|
||||
cbuffer->setColumns({tr("Root Sig El"), tr("Space"), tr("Register"), tr("Buffer"),
|
||||
tr("Byte Range"), tr("Size"), tr("Go")});
|
||||
header->setColumnStretchHints({1, 1, 2, 4, 3, 3, -1});
|
||||
@@ -1020,12 +1028,39 @@ void D3D12PipelineStateViewer::setShaderState(
|
||||
if((rootElements[i].visibility & MaskForStage(stage.stage)) == ShaderStageMask::Unknown)
|
||||
continue;
|
||||
|
||||
bool omittingEmpty = false;
|
||||
|
||||
switch(rootElements[i].type)
|
||||
{
|
||||
case BindType::ReadOnlyResource:
|
||||
{
|
||||
for(size_t j = 0; j < rootElements[i].views.size(); ++j)
|
||||
{
|
||||
// for empty views, if the last two views were empty and the next one is empty then just
|
||||
// emit a "..." row for large ranges of empty views
|
||||
if(rootElements[i].views[j].resourceId == ResourceId() && j > 2 &&
|
||||
j + 1 < rootElements[i].views.size() &&
|
||||
rootElements[i].views[j - 2].resourceId == ResourceId() &&
|
||||
rootElements[i].views[j - 1].resourceId == ResourceId() &&
|
||||
rootElements[i].views[j + 1].resourceId == ResourceId())
|
||||
{
|
||||
if(!omittingEmpty)
|
||||
{
|
||||
RDTreeWidgetItem *node = new RDTreeWidgetItem(
|
||||
{lit("..."), QString(), QString(), QString(), QString(), QString(), QString(),
|
||||
QString(), QString(), QString(), QString()});
|
||||
|
||||
setEmptyRow(node);
|
||||
|
||||
resources->addTopLevelItem(node);
|
||||
}
|
||||
|
||||
omittingEmpty = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
omittingEmpty = false;
|
||||
|
||||
addResourceRow(D3D12ViewTag(D3D12ViewTag::SRV, rootElements[i].registerSpace, (int)i,
|
||||
rootElements[i].immediate, rootElements[i].views[j]),
|
||||
&stage, resources);
|
||||
@@ -1036,6 +1071,31 @@ void D3D12PipelineStateViewer::setShaderState(
|
||||
{
|
||||
for(size_t j = 0; j < rootElements[i].views.size(); ++j)
|
||||
{
|
||||
// for empty views, if the last view and next two are also empty then just emit a "..."
|
||||
// row for large ranges of empty views
|
||||
if(rootElements[i].views[j].resourceId == ResourceId() && j > 1 &&
|
||||
j + 2 < rootElements[i].views.size() &&
|
||||
rootElements[i].views[j - 1].resourceId == ResourceId() &&
|
||||
rootElements[i].views[j + 1].resourceId == ResourceId() &&
|
||||
rootElements[i].views[j + 2].resourceId == ResourceId())
|
||||
{
|
||||
if(!omittingEmpty)
|
||||
{
|
||||
RDTreeWidgetItem *node = new RDTreeWidgetItem(
|
||||
{lit("..."), QString(), QString(), QString(), QString(), QString(), QString(),
|
||||
QString(), QString(), QString(), QString()});
|
||||
|
||||
setEmptyRow(node);
|
||||
|
||||
resources->addTopLevelItem(node);
|
||||
}
|
||||
|
||||
omittingEmpty = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
omittingEmpty = false;
|
||||
|
||||
addResourceRow(D3D12ViewTag(D3D12ViewTag::UAV, rootElements[i].registerSpace, (int)i,
|
||||
rootElements[i].immediate, rootElements[i].views[j]),
|
||||
&stage, uavs);
|
||||
|
||||
Reference in New Issue
Block a user