Fix transform feedback pipeline state display

This commit is contained in:
baldurk
2017-12-11 20:12:02 +00:00
parent 1c44f91cb8
commit 9b9c74ec03
6 changed files with 50 additions and 12 deletions
@@ -261,6 +261,21 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
ubo->setInstantTooltips(true);
}
{
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
ui->xfbBuffers->setHeader(header);
ui->xfbBuffers->setColumns(
{tr("Slot"), tr("Buffer"), tr("Byte Length"), tr("Offset"), tr("Go")});
header->setColumnStretchHints({1, 4, 3, 2, -1});
header->setMinimumSectionSize(40);
ui->xfbBuffers->setClearSelectionOnFocusLoss(true);
ui->xfbBuffers->setInstantTooltips(true);
ui->xfbBuffers->setHoverIconColumn(4, action, action_hover);
}
{
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
ui->viewports->setHeader(header);
@@ -348,7 +363,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
ui->viAttrs->setFont(Formatter::PreferredFont());
ui->viBuffers->setFont(Formatter::PreferredFont());
ui->gsFeedback->setFont(Formatter::PreferredFont());
ui->xfbBuffers->setFont(Formatter::PreferredFont());
ui->vsShader->setFont(Formatter::PreferredFont());
ui->vsTextures->setFont(Formatter::PreferredFont());
ui->vsSamplers->setFont(Formatter::PreferredFont());
@@ -1281,9 +1296,9 @@ void GLPipelineStateViewer::setState()
setShaderState(state.m_CS, ui->csShader, ui->csTextures, ui->csSamplers, ui->csUBOs,
ui->csSubroutines, ui->csReadWrite);
vs = ui->gsFeedback->verticalScrollBar()->value();
ui->gsFeedback->beginUpdate();
ui->gsFeedback->clear();
vs = ui->xfbBuffers->verticalScrollBar()->value();
ui->xfbBuffers->beginUpdate();
ui->xfbBuffers->clear();
ui->xfbObj->setText(ToQStr(state.m_Feedback.Obj));
if(state.m_Feedback.Active)
{
@@ -1314,15 +1329,14 @@ void GLPipelineStateViewer::setState()
if(!usedSlot)
setInactiveRow(node);
ui->gsFeedback->addTopLevelItem(node);
ui->xfbBuffers->addTopLevelItem(node);
}
}
}
ui->gsFeedback->verticalScrollBar()->setValue(vs);
ui->gsFeedback->clearSelection();
ui->gsFeedback->endUpdate();
ui->xfbBuffers->verticalScrollBar()->setValue(vs);
ui->xfbBuffers->clearSelection();
ui->xfbBuffers->endUpdate();
ui->gsFeedback->setVisible(state.m_Feedback.Active);
ui->xfbGroup->setVisible(state.m_Feedback.Active);
////////////////////////////////////////////////
@@ -1872,9 +1886,27 @@ void GLPipelineStateViewer::setState()
}
else
{
bool raster = true;
bool fbo = true;
if(state.m_VtxProcess.discard)
{
raster = fbo = false;
}
if(state.m_GS.Object == ResourceId() && state.m_Feedback.Active)
{
ui->pipeFlow->setStageName(4, lit("XFB"), tr("Transform Feedback"));
}
else
{
ui->pipeFlow->setStageName(4, lit("GS"), tr("Geometry Shader"));
}
ui->pipeFlow->setStagesEnabled(
{true, true, state.m_TCS.Object != ResourceId(), state.m_TES.Object != ResourceId(),
state.m_GS.Object != ResourceId(), true, state.m_FS.Object != ResourceId(), true, false});
state.m_GS.Object != ResourceId() || state.m_Feedback.Active, raster,
!state.m_VtxProcess.discard && state.m_FS.Object != ResourceId(), fbo, false});
}
}
@@ -2170,7 +2170,7 @@
</layout>
</item>
<item row="4" column="0" colspan="2">
<widget class="RDTreeWidget" name="gsFeedback">
<widget class="RDTreeWidget" name="xfbBuffers">
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
+3
View File
@@ -3353,7 +3353,10 @@ void GLReplay::InitPostVSBuffers(uint32_t eventID)
WrappedOpenGL &gl = *m_pDriver;
if(gl.m_ActiveFeedback)
{
gl.glEndTransformFeedback();
gl.m_WasActiveFeedback = true;
}
GLResourceManager *rm = m_pDriver->GetResourceManager();
+2
View File
@@ -5224,6 +5224,8 @@ void WrappedOpenGL::ReplayLog(uint32_t startEventID, uint32_t endEventID, Replay
{
GLMarkerRegion apply("!!!!RenderDoc Internal: ApplyInitialContents");
GetResourceManager()->ApplyInitialContents();
m_WasActiveFeedback = false;
}
m_State = CaptureState::ActiveReplaying;
+1
View File
@@ -142,6 +142,7 @@ private:
[MAX_QUERY_INDICES]; // first index type, second index (for some, always 0)
bool m_ActiveConditional;
bool m_ActiveFeedback;
bool m_WasActiveFeedback = false;
ResourceId m_DeviceResourceID;
GLResourceRecord *m_DeviceRecord;
+1 -1
View File
@@ -1131,7 +1131,7 @@ void GLReplay::SavePipelineState()
pipe.m_Feedback.Paused = (p != 0);
gl.glGetIntegerv(eGL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE, &p);
pipe.m_Feedback.Active = (p != 0);
pipe.m_Feedback.Active = (p != 0) || m_pDriver->m_WasActiveFeedback;
}
for(int i = 0; i < 6; i++)