From 11fa2294d790dccd7b85283b3506231c7fb073f7 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Wed, 19 Dec 2018 13:52:39 +0200 Subject: [PATCH] Display conditional rendering state for compute shader If conditional rendering is enabled its state is always displayed in both 'Rasterizer' and 'CS' states. Signed-off-by: Danylo Piliaiev --- .../VulkanPipelineStateViewer.cpp | 42 +++++++--- .../PipelineState/VulkanPipelineStateViewer.h | 2 +- .../VulkanPipelineStateViewer.ui | 77 ++++++++++++++++++- 3 files changed, 108 insertions(+), 13 deletions(-) diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 36f772fcc..67b19cb50 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -120,6 +120,10 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, ui->gsShaderSaveButton, ui->fsShaderSaveButton, ui->csShaderSaveButton, }; + QToolButton *viewPredicateBufferButtons[] = { + ui->predicateBufferViewButton, ui->csPredicateBufferViewButton, + }; + RDTreeWidget *resources[] = { ui->vsResources, ui->tcsResources, ui->tesResources, ui->gsResources, ui->fsResources, ui->csResources, @@ -146,6 +150,10 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, for(QToolButton *b : saveButtons) QObject::connect(b, &QToolButton::clicked, this, &VulkanPipelineStateViewer::shaderSave_clicked); + for(QToolButton *b : viewPredicateBufferButtons) + QObject::connect(b, &QToolButton::clicked, this, + &VulkanPipelineStateViewer::predicateBufferView_clicked); + QObject::connect(ui->viAttrs, &RDTreeWidget::leave, this, &VulkanPipelineStateViewer::vertex_leave); QObject::connect(ui->viBuffers, &RDTreeWidget::leave, this, &VulkanPipelineStateViewer::vertex_leave); @@ -276,7 +284,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, ui->scissors->setInstantTooltips(true); } - for(RDLabel *rp : {ui->renderpass, ui->framebuffer, ui->predicateBuffer}) + for(RDLabel *rp : {ui->renderpass, ui->framebuffer, ui->predicateBuffer, ui->csPredicateBuffer}) { rp->setAutoFillBackground(true); rp->setBackgroundRole(QPalette::ToolTipBase); @@ -654,6 +662,7 @@ void VulkanPipelineStateViewer::clearState() ui->stencils->clear(); ui->conditionalRenderingGroup->setVisible(false); + ui->csConditionalRenderingGroup->setVisible(false); } QVariantList VulkanPipelineStateViewer::makeSampler(const QString &bindset, const QString &slotname, @@ -2038,6 +2047,7 @@ void VulkanPipelineStateViewer::setState() if(state.conditionalRendering.bufferId == ResourceId()) { ui->conditionalRenderingGroup->setVisible(false); + ui->csConditionalRenderingGroup->setVisible(false); } else { @@ -2047,6 +2057,13 @@ void VulkanPipelineStateViewer::setState() .arg(state.conditionalRendering.byteOffset)); ui->predicatePassing->setPixmap(state.conditionalRendering.isPassing ? tick : cross); ui->predicateInverted->setPixmap(state.conditionalRendering.isInverted ? tick : cross); + + ui->csConditionalRenderingGroup->setVisible(true); + ui->csPredicateBuffer->setText(QFormatStr("%1 (Byte Offset %2)") + .arg(ToQStr(state.conditionalRendering.bufferId)) + .arg(state.conditionalRendering.byteOffset)); + ui->csPredicatePassing->setPixmap(state.conditionalRendering.isPassing ? tick : cross); + ui->csPredicateInverted->setPixmap(state.conditionalRendering.isInverted ? tick : cross); } //////////////////////////////////////////////// @@ -2642,6 +2659,15 @@ void VulkanPipelineStateViewer::shaderSave_clicked() m_Common.SaveShaderFile(shaderDetails); } +void VulkanPipelineStateViewer::predicateBufferView_clicked() +{ + const VKPipe::ConditionalRendering &cr = m_Ctx.CurVulkanPipelineState()->conditionalRendering; + + IBufferViewer *viewer = m_Ctx.ViewBuffer(cr.byteOffset, sizeof(uint32_t), cr.bufferId, "uint"); + + m_Ctx.AddDockWindow(viewer->Widget(), DockReference::AddTo, this); +} + void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::VertexInput &vi) { { @@ -3501,7 +3527,10 @@ void VulkanPipelineStateViewer::on_exportHTML_clicked() xml.writeEndElement(); exportHTML(xml, m_Ctx.CurVulkanPipelineState()->currentPass); break; - case 8: exportHTML(xml, m_Ctx.CurVulkanPipelineState()->computeShader); break; + case 8: + exportHTML(xml, m_Ctx.CurVulkanPipelineState()->computeShader); + exportHTML(xml, m_Ctx.CurVulkanPipelineState()->conditionalRendering); + break; } xml.writeEndElement(); @@ -3518,13 +3547,4 @@ void VulkanPipelineStateViewer::on_meshView_clicked() if(!m_Ctx.HasMeshPreview()) m_Ctx.ShowMeshPreview(); ToolWindowManager::raiseToolWindow(m_Ctx.GetMeshPreview()->Widget()); -} - -void VulkanPipelineStateViewer::on_predicateBufferView_clicked() -{ - const VKPipe::ConditionalRendering &cr = m_Ctx.CurVulkanPipelineState()->conditionalRendering; - - IBufferViewer *viewer = m_Ctx.ViewBuffer(cr.byteOffset, sizeof(uint32_t), cr.bufferId, "uint"); - - m_Ctx.AddDockWindow(viewer->Widget(), DockReference::AddTo, this); } \ No newline at end of file diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h index 2d23307f7..dacbd9536 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h @@ -66,7 +66,6 @@ private slots: void on_showEmpty_toggled(bool checked); void on_exportHTML_clicked(); void on_meshView_clicked(); - void on_predicateBufferView_clicked(); void on_viAttrs_itemActivated(RDTreeWidgetItem *item, int column); void on_viBuffers_itemActivated(RDTreeWidgetItem *item, int column); void on_viAttrs_mouseMove(QMouseEvent *event); @@ -77,6 +76,7 @@ private slots: void shaderView_clicked(); void shaderSave_clicked(); + void predicateBufferView_clicked(); void resource_itemActivated(RDTreeWidgetItem *item, int column); void ubo_itemActivated(RDTreeWidgetItem *item, int column); void vertex_leave(QEvent *e); diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui index 18d8474f0..d0b626622 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui @@ -1843,7 +1843,7 @@ - + PointingHandCursor @@ -3463,6 +3463,81 @@ + + + + Conditional Rendering + + + + + + Passing: + + + + + + + + + + Inverted: + + + + + + + + + + QFrame::Box + + + 4 + + + + + + + PointingHandCursor + + + Open Predicate Buffer + + + View + + + + :/action.png:/action.png + + + Qt::ToolButtonTextBesideIcon + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + +