mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-22 21:55:52 +00:00
Fix transform feedback pipeline state display
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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++)
|
||||
|
||||
Reference in New Issue
Block a user