diff --git a/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp b/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp index 43a541978..dba2df4bc 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp +++ b/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp @@ -339,13 +339,13 @@ void RDTreeWidgetItem::addChild(RDTreeWidgetItem *item) item->m_data->resize(qMax(item->m_data->count(), colCount)); if(m_widget) - m_widget->m_model->beginAddChild(this); + m_widget->beginAddChild(this); // add to our list of children m_children.push_back(item); if(m_widget) - m_widget->m_model->endAddChild(this); + m_widget->endAddChild(this); } void RDTreeWidgetItem::setWidget(RDTreeWidget *widget) @@ -367,13 +367,13 @@ void RDTreeWidgetItem::dataChanged(int role) RDTreeWidgetItem *RDTreeWidgetItem::takeChild(int index) { - if(m_widget) + if(m_widget && !m_widget->m_clearing) m_widget->m_model->beginRemoveChildren(this, index, index); m_children[index]->m_parent = NULL; RDTreeWidgetItem *ret = m_children.takeAt(index); - if(m_widget) + if(m_widget && !m_widget->m_clearing) m_widget->m_model->endRemoveChildren(); return ret; @@ -398,7 +398,7 @@ void RDTreeWidgetItem::clear() if(!childCount()) return; - if(m_widget) + if(m_widget && !m_widget->m_clearing) m_widget->m_model->beginRemoveChildren(this, 0, childCount() - 1); while(childCount() > 0) @@ -408,7 +408,7 @@ void RDTreeWidgetItem::clear() delete child; } - if(m_widget) + if(m_widget && !m_widget->m_clearing) m_widget->m_model->endRemoveChildren(); } @@ -448,7 +448,10 @@ void RDTreeWidget::beginUpdate() m_queuedItem = NULL; m_lowestIndex = m_highestIndex = qMakePair(-1, -1); + m_queuedChildren = false; m_queuedRoles = 0; + + setUpdatesEnabled(false); } void RDTreeWidget::endUpdate() @@ -471,9 +474,19 @@ void RDTreeWidget::endUpdate() if(m_queuedRoles & (1ULL << r)) roles.push_back(r); } - m_model->itemsChanged(m_queuedItem, m_lowestIndex, m_highestIndex, roles); + + if(m_queuedChildren) + { + m_model->beginAddChild(m_queuedItem); + m_model->endAddChild(m_queuedItem); + } + + if(!roles.isEmpty()) + m_model->itemsChanged(m_queuedItem, m_lowestIndex, m_highestIndex, roles); } } + + setUpdatesEnabled(true); } void RDTreeWidget::setColumns(const QStringList &columns) @@ -558,7 +571,11 @@ void RDTreeWidget::scrollToItem(RDTreeWidgetItem *node) void RDTreeWidget::clear() { + m_clearing = true; m_root->clear(); + m_clearing = false; + + m_model->refresh(); } void RDTreeWidget::mouseMoveEvent(QMouseEvent *e) @@ -821,3 +838,44 @@ void RDTreeWidget::itemDataChanged(RDTreeWidgetItem *item, int role) m_model->itemChanged(item, {role}); } } + +void RDTreeWidget::beginAddChild(RDTreeWidgetItem *item) +{ + if(m_queueUpdates) + { + m_queuedChildren = true; + + if(m_lowestIndex.first == -1) + { + m_queuedItem = item; + // make an update of row 0. This will be a bit pessimistic if there are later data changes + // in a later row, but we're generally only changing data *or* adding children, not both, and + // in either case this is primarily about batching updates not providing a minimal update set + m_lowestIndex = qMakePair(0, 0); + m_highestIndex = qMakePair(0, m_headers.count() - 1); + } + else + { + if(m_queuedItem == item) + { + // there's already an update. don't need to expand it, the m_queuedChildren is enough + } + else + { + // can't batch updates across multiple parents, so we just fallback to full model refresh + m_queuedItem = NULL; + } + } + } + else + { + m_model->beginAddChild(item); + } +} + +void RDTreeWidget::endAddChild(RDTreeWidgetItem *item) +{ + // work is all done in beginAddChild + if(!m_queueUpdates) + m_model->endAddChild(item); +} diff --git a/qrenderdoc/Widgets/Extended/RDTreeWidget.h b/qrenderdoc/Widgets/Extended/RDTreeWidget.h index e9870c6b9..ace2a75c1 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeWidget.h +++ b/qrenderdoc/Widgets/Extended/RDTreeWidget.h @@ -223,6 +223,8 @@ private: void setModel(QAbstractItemModel *model) override {} void itemDataChanged(RDTreeWidgetItem *item, int role); + void beginAddChild(RDTreeWidgetItem *item); + void endAddChild(RDTreeWidgetItem *item); friend class RDTreeWidgetModel; friend class RDTreeWidgetItem; @@ -232,6 +234,8 @@ private: RDTreeWidgetModel *m_model; + bool m_clearing = false; + QStringList m_headers; bool m_queueUpdates = false; @@ -239,7 +243,8 @@ private: RDTreeWidgetItem *m_queuedItem; QPair m_lowestIndex; QPair m_highestIndex; - uint64_t m_queuedRoles; + uint64_t m_queuedRoles = 0; + bool m_queuedChildren = false; bool m_instantTooltips = false; bool m_customCopyPaste = false; diff --git a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp index d3fdf2275..a0361faed 100644 --- a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp +++ b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp @@ -295,7 +295,7 @@ bool ConstantBufferPreviewer::updateVariables(RDTreeWidgetItem *root, void ConstantBufferPreviewer::setVariables(const rdctype::array &vars) { - ui->variables->setUpdatesEnabled(false); + ui->variables->beginUpdate(); // try to update the variables in-place by only changing their values, if the set of variables // matches *exactly* to what we had before. @@ -308,7 +308,7 @@ void ConstantBufferPreviewer::setVariables(const rdctype::array if(updated) { - ui->variables->setUpdatesEnabled(true); + ui->variables->endUpdate(); return; } @@ -322,7 +322,7 @@ void ConstantBufferPreviewer::setVariables(const rdctype::array ui->saveCSV->setEnabled(true); } - ui->variables->setUpdatesEnabled(true); + ui->variables->endUpdate(); } void ConstantBufferPreviewer::updateLabels() diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index 253a62b6d..604485ab6 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -861,7 +861,7 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL int vs = 0; vs = resources->verticalScrollBar()->value(); - resources->setUpdatesEnabled(false); + resources->beginUpdate(); resources->clear(); for(int i = 0; i < stage.SRVs.count; i++) { @@ -882,11 +882,11 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL addResourceRow(D3D11ViewTag(D3D11ViewTag::SRV, i, stage.SRVs[i]), shaderInput, resources); } resources->clearSelection(); - resources->setUpdatesEnabled(true); + resources->endUpdate(); resources->verticalScrollBar()->setValue(vs); vs = samplers->verticalScrollBar()->value(); - samplers->setUpdatesEnabled(false); + samplers->beginUpdate(); samplers->clear(); for(int i = 0; i < stage.Samplers.count; i++) { @@ -984,11 +984,11 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL } samplers->clearSelection(); - samplers->setUpdatesEnabled(true); + samplers->endUpdate(); samplers->verticalScrollBar()->setValue(vs); vs = cbuffers->verticalScrollBar()->value(); - cbuffers->setUpdatesEnabled(false); + cbuffers->beginUpdate(); cbuffers->clear(); for(int i = 0; i < stage.ConstantBuffers.count; i++) { @@ -1068,11 +1068,11 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL } } cbuffers->clearSelection(); - cbuffers->setUpdatesEnabled(true); + cbuffers->endUpdate(); cbuffers->verticalScrollBar()->setValue(vs); vs = classes->verticalScrollBar()->value(); - classes->setUpdatesEnabled(false); + classes->beginUpdate(); classes->clear(); for(int i = 0; i < stage.ClassInstances.count; i++) { @@ -1084,7 +1084,7 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL classes->addTopLevelItem(new RDTreeWidgetItem({i, interfaceName, stage.ClassInstances[i]})); } classes->clearSelection(); - classes->setUpdatesEnabled(true); + classes->endUpdate(); classes->verticalScrollBar()->setValue(vs); classes->parentWidget()->setVisible(!stage.ClassInstances.empty()); @@ -1208,7 +1208,7 @@ void D3D11PipelineStateViewer::setState() uint32_t layoutOffs[128] = {}; vs = ui->iaLayouts->verticalScrollBar()->value(); - ui->iaLayouts->setUpdatesEnabled(false); + ui->iaLayouts->beginUpdate(); ui->iaLayouts->clear(); { int i = 0; @@ -1262,7 +1262,7 @@ void D3D11PipelineStateViewer::setState() } } ui->iaLayouts->clearSelection(); - ui->iaLayouts->setUpdatesEnabled(true); + ui->iaLayouts->endUpdate(); ui->iaLayouts->verticalScrollBar()->setValue(vs); Topology topo = draw ? draw->topology : Topology::Unknown; @@ -1282,7 +1282,7 @@ void D3D11PipelineStateViewer::setState() bool ibufferUsed = draw && (draw->flags & DrawFlags::UseIBuffer); vs = ui->iaBuffers->verticalScrollBar()->value(); - ui->iaBuffers->setUpdatesEnabled(false); + ui->iaBuffers->beginUpdate(); ui->iaBuffers->clear(); if(state.m_IA.ibuffer.Buffer != ResourceId()) @@ -1387,7 +1387,7 @@ void D3D11PipelineStateViewer::setState() } } ui->iaBuffers->clearSelection(); - ui->iaBuffers->setUpdatesEnabled(true); + ui->iaBuffers->endUpdate(); ui->iaBuffers->verticalScrollBar()->setValue(vs); setShaderState(state.m_VS, ui->vsShader, ui->vsResources, ui->vsSamplers, ui->vsCBuffers, @@ -1404,7 +1404,7 @@ void D3D11PipelineStateViewer::setState() ui->csClasses); vs = ui->csUAVs->verticalScrollBar()->value(); - ui->csUAVs->setUpdatesEnabled(false); + ui->csUAVs->beginUpdate(); ui->csUAVs->clear(); for(int i = 0; i < state.m_CS.UAVs.count; i++) { @@ -1425,12 +1425,12 @@ void D3D11PipelineStateViewer::setState() addResourceRow(D3D11ViewTag(D3D11ViewTag::UAV, i, state.m_CS.UAVs[i]), shaderInput, ui->csUAVs); } ui->csUAVs->clearSelection(); - ui->csUAVs->setUpdatesEnabled(true); + ui->csUAVs->endUpdate(); ui->csUAVs->verticalScrollBar()->setValue(vs); bool streamoutSet = false; vs = ui->gsStreamOut->verticalScrollBar()->value(); - ui->gsStreamOut->setUpdatesEnabled(false); + ui->gsStreamOut->beginUpdate(); ui->gsStreamOut->clear(); for(int i = 0; i < state.m_SO.Outputs.count; i++) { @@ -1473,7 +1473,7 @@ void D3D11PipelineStateViewer::setState() } ui->gsStreamOut->verticalScrollBar()->setValue(vs); ui->gsStreamOut->clearSelection(); - ui->gsStreamOut->setUpdatesEnabled(true); + ui->gsStreamOut->endUpdate(); ui->gsStreamOut->setVisible(streamoutSet); ui->soGroup->setVisible(streamoutSet); @@ -1482,7 +1482,7 @@ void D3D11PipelineStateViewer::setState() // Rasterizer vs = ui->viewports->verticalScrollBar()->value(); - ui->viewports->setUpdatesEnabled(false); + ui->viewports->beginUpdate(); ui->viewports->clear(); for(int i = 0; i < state.m_RS.Viewports.count; i++) { @@ -1504,10 +1504,10 @@ void D3D11PipelineStateViewer::setState() } ui->viewports->verticalScrollBar()->setValue(vs); ui->viewports->clearSelection(); - ui->viewports->setUpdatesEnabled(true); + ui->viewports->endUpdate(); vs = ui->scissors->verticalScrollBar()->value(); - ui->scissors->setUpdatesEnabled(false); + ui->scissors->beginUpdate(); ui->scissors->clear(); for(int i = 0; i < state.m_RS.Scissors.count; i++) { @@ -1529,7 +1529,7 @@ void D3D11PipelineStateViewer::setState() } ui->scissors->clearSelection(); ui->scissors->verticalScrollBar()->setValue(vs); - ui->scissors->setUpdatesEnabled(true); + ui->scissors->endUpdate(); ui->fillMode->setText(ToQStr(state.m_RS.m_State.fillMode)); ui->cullMode->setText(ToQStr(state.m_RS.m_State.cullMode)); @@ -1552,7 +1552,7 @@ void D3D11PipelineStateViewer::setState() bool targets[32] = {}; vs = ui->targetOutputs->verticalScrollBar()->value(); - ui->targetOutputs->setUpdatesEnabled(false); + ui->targetOutputs->beginUpdate(); ui->targetOutputs->clear(); { for(int i = 0; i < state.m_OM.RenderTargets.count; i++) @@ -1597,11 +1597,11 @@ void D3D11PipelineStateViewer::setState() ui->targetOutputs); } ui->targetOutputs->clearSelection(); - ui->targetOutputs->setUpdatesEnabled(true); + ui->targetOutputs->endUpdate(); ui->targetOutputs->verticalScrollBar()->setValue(vs); vs = ui->blends->verticalScrollBar()->value(); - ui->blends->setUpdatesEnabled(false); + ui->blends->beginUpdate(); ui->blends->clear(); { int i = 0; @@ -1645,7 +1645,7 @@ void D3D11PipelineStateViewer::setState() } } ui->blends->clearSelection(); - ui->blends->setUpdatesEnabled(true); + ui->blends->endUpdate(); ui->blends->verticalScrollBar()->setValue(vs); ui->alphaToCoverage->setPixmap(state.m_OM.m_BlendState.AlphaToCoverage ? tick : cross); @@ -1667,7 +1667,7 @@ void D3D11PipelineStateViewer::setState() ui->stencilWriteMask->setText(Formatter::Format(state.m_OM.m_State.StencilWriteMask, true)); ui->stencilRef->setText(Formatter::Format(state.m_OM.m_State.StencilRef, true)); - ui->stencils->setUpdatesEnabled(false); + ui->stencils->beginUpdate(); ui->stencils->clear(); ui->stencils->addTopLevelItem( new RDTreeWidgetItem({tr("Front"), ToQStr(state.m_OM.m_State.m_FrontFace.Func), @@ -1679,7 +1679,7 @@ void D3D11PipelineStateViewer::setState() ToQStr(state.m_OM.m_State.m_BackFace.FailOp), ToQStr(state.m_OM.m_State.m_BackFace.DepthFailOp), ToQStr(state.m_OM.m_State.m_BackFace.PassOp)})); ui->stencils->clearSelection(); - ui->stencils->setUpdatesEnabled(true); + ui->stencils->endUpdate(); // set up thread debugging inputs if(state.m_CS.ShaderDetails && draw && (draw->flags & DrawFlags::Dispatch)) diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index 3bad1e496..6adbe96fa 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -932,7 +932,7 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL int vs = 0; vs = resources->verticalScrollBar()->value(); - resources->setUpdatesEnabled(false); + resources->beginUpdate(); resources->clear(); for(int space = 0; space < stage.Spaces.count; space++) { @@ -943,11 +943,11 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL } } resources->clearSelection(); - resources->setUpdatesEnabled(true); + resources->endUpdate(); resources->verticalScrollBar()->setValue(vs); vs = uavs->verticalScrollBar()->value(); - uavs->setUpdatesEnabled(false); + uavs->beginUpdate(); uavs->clear(); for(int space = 0; space < stage.Spaces.count; space++) { @@ -958,11 +958,11 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL } } uavs->clearSelection(); - uavs->setUpdatesEnabled(true); + uavs->endUpdate(); uavs->verticalScrollBar()->setValue(vs); vs = samplers->verticalScrollBar()->value(); - samplers->setUpdatesEnabled(false); + samplers->beginUpdate(); samplers->clear(); for(int space = 0; space < stage.Spaces.count; space++) { @@ -1079,11 +1079,11 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL } } samplers->clearSelection(); - samplers->setUpdatesEnabled(true); + samplers->endUpdate(); samplers->verticalScrollBar()->setValue(vs); vs = cbuffers->verticalScrollBar()->value(); - cbuffers->setUpdatesEnabled(false); + cbuffers->beginUpdate(); cbuffers->clear(); for(int space = 0; space < stage.Spaces.count; space++) { @@ -1193,7 +1193,7 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL } } cbuffers->clearSelection(); - cbuffers->setUpdatesEnabled(true); + cbuffers->endUpdate(); cbuffers->verticalScrollBar()->setValue(vs); } @@ -1220,7 +1220,7 @@ void D3D12PipelineStateViewer::setState() uint32_t layoutOffs[128] = {}; vs = ui->iaLayouts->verticalScrollBar()->value(); - ui->iaLayouts->setUpdatesEnabled(false); + ui->iaLayouts->beginUpdate(); ui->iaLayouts->clear(); { int i = 0; @@ -1274,7 +1274,7 @@ void D3D12PipelineStateViewer::setState() } } ui->iaLayouts->clearSelection(); - ui->iaLayouts->setUpdatesEnabled(true); + ui->iaLayouts->endUpdate(); ui->iaLayouts->verticalScrollBar()->setValue(vs); Topology topo = draw ? draw->topology : Topology::Unknown; @@ -1294,7 +1294,7 @@ void D3D12PipelineStateViewer::setState() bool ibufferUsed = draw && (draw->flags & DrawFlags::UseIBuffer); vs = ui->iaBuffers->verticalScrollBar()->value(); - ui->iaBuffers->setUpdatesEnabled(false); + ui->iaBuffers->beginUpdate(); ui->iaBuffers->clear(); if(state.m_IA.ibuffer.Buffer != ResourceId()) @@ -1399,7 +1399,7 @@ void D3D12PipelineStateViewer::setState() } } ui->iaBuffers->clearSelection(); - ui->iaBuffers->setUpdatesEnabled(true); + ui->iaBuffers->endUpdate(); ui->iaBuffers->verticalScrollBar()->setValue(vs); setShaderState(state.m_VS, ui->vsShader, ui->vsResources, ui->vsSamplers, ui->vsCBuffers, @@ -1417,7 +1417,7 @@ void D3D12PipelineStateViewer::setState() bool streamoutSet = false; vs = ui->gsStreamOut->verticalScrollBar()->value(); - ui->gsStreamOut->setUpdatesEnabled(false); + ui->gsStreamOut->beginUpdate(); ui->gsStreamOut->clear(); for(int i = 0; i < state.m_SO.Outputs.count; i++) { @@ -1461,7 +1461,7 @@ void D3D12PipelineStateViewer::setState() } ui->gsStreamOut->verticalScrollBar()->setValue(vs); ui->gsStreamOut->clearSelection(); - ui->gsStreamOut->setUpdatesEnabled(true); + ui->gsStreamOut->endUpdate(); ui->gsStreamOut->setVisible(streamoutSet); ui->soGroup->setVisible(streamoutSet); @@ -1470,7 +1470,7 @@ void D3D12PipelineStateViewer::setState() // Rasterizer vs = ui->viewports->verticalScrollBar()->value(); - ui->viewports->setUpdatesEnabled(false); + ui->viewports->beginUpdate(); ui->viewports->clear(); for(int i = 0; i < state.m_RS.Viewports.count; i++) { @@ -1486,10 +1486,10 @@ void D3D12PipelineStateViewer::setState() } ui->viewports->verticalScrollBar()->setValue(vs); ui->viewports->clearSelection(); - ui->viewports->setUpdatesEnabled(true); + ui->viewports->endUpdate(); vs = ui->scissors->verticalScrollBar()->value(); - ui->scissors->setUpdatesEnabled(false); + ui->scissors->beginUpdate(); ui->scissors->clear(); for(int i = 0; i < state.m_RS.Scissors.count; i++) { @@ -1505,7 +1505,7 @@ void D3D12PipelineStateViewer::setState() } ui->scissors->clearSelection(); ui->scissors->verticalScrollBar()->setValue(vs); - ui->scissors->setUpdatesEnabled(true); + ui->scissors->endUpdate(); ui->fillMode->setText(ToQStr(state.m_RS.m_State.fillMode)); ui->cullMode->setText(ToQStr(state.m_RS.m_State.cullMode)); @@ -1527,7 +1527,7 @@ void D3D12PipelineStateViewer::setState() bool targets[32] = {}; vs = ui->targetOutputs->verticalScrollBar()->value(); - ui->targetOutputs->setUpdatesEnabled(false); + ui->targetOutputs->beginUpdate(); ui->targetOutputs->clear(); { for(int i = 0; i < state.m_OM.RenderTargets.count; i++) @@ -1543,11 +1543,11 @@ void D3D12PipelineStateViewer::setState() ui->targetOutputs); } ui->targetOutputs->clearSelection(); - ui->targetOutputs->setUpdatesEnabled(true); + ui->targetOutputs->endUpdate(); ui->targetOutputs->verticalScrollBar()->setValue(vs); vs = ui->blends->verticalScrollBar()->value(); - ui->blends->setUpdatesEnabled(false); + ui->blends->beginUpdate(); ui->blends->clear(); { int i = 0; @@ -1591,7 +1591,7 @@ void D3D12PipelineStateViewer::setState() } } ui->blends->clearSelection(); - ui->blends->setUpdatesEnabled(true); + ui->blends->endUpdate(); ui->blends->verticalScrollBar()->setValue(vs); ui->alphaToCoverage->setPixmap(state.m_OM.m_BlendState.AlphaToCoverage ? tick : cross); @@ -1612,7 +1612,7 @@ void D3D12PipelineStateViewer::setState() ui->stencilWriteMask->setText(Formatter::Format(state.m_OM.m_State.StencilWriteMask, true)); ui->stencilRef->setText(Formatter::Format(state.m_OM.m_State.StencilRef, true)); - ui->stencils->setUpdatesEnabled(false); + ui->stencils->beginUpdate(); ui->stencils->clear(); ui->stencils->addTopLevelItem( new RDTreeWidgetItem({tr("Front"), ToQStr(state.m_OM.m_State.m_FrontFace.Func), @@ -1624,7 +1624,7 @@ void D3D12PipelineStateViewer::setState() ToQStr(state.m_OM.m_State.m_BackFace.FailOp), ToQStr(state.m_OM.m_State.m_BackFace.DepthFailOp), ToQStr(state.m_OM.m_State.m_BackFace.PassOp)})); ui->stencils->clearSelection(); - ui->stencils->setUpdatesEnabled(true); + ui->stencils->endUpdate(); // highlight the appropriate stages in the flowchart if(draw == NULL) diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 589ed325e..ef12d4754 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -612,10 +612,10 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * // simultaneous update of resources and samplers vs = textures->verticalScrollBar()->value(); - textures->setUpdatesEnabled(false); + textures->beginUpdate(); textures->clear(); vs2 = samplers->verticalScrollBar()->value(); - samplers->setUpdatesEnabled(false); + samplers->beginUpdate(); samplers->clear(); for(int i = 0; i < state.Textures.count; i++) @@ -788,14 +788,14 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * } samplers->clearSelection(); - samplers->setUpdatesEnabled(true); + samplers->endUpdate(); samplers->verticalScrollBar()->setValue(vs2); textures->clearSelection(); - textures->setUpdatesEnabled(true); + textures->endUpdate(); textures->verticalScrollBar()->setValue(vs); vs = ubos->verticalScrollBar()->value(); - ubos->setUpdatesEnabled(false); + ubos->beginUpdate(); ubos->clear(); for(int i = 0; shaderDetails && i < shaderDetails->ConstantBlocks.count; i++) { @@ -869,22 +869,22 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * } } ubos->clearSelection(); - ubos->setUpdatesEnabled(true); + ubos->endUpdate(); ubos->verticalScrollBar()->setValue(vs); vs = subs->verticalScrollBar()->value(); - subs->setUpdatesEnabled(false); + subs->beginUpdate(); subs->clear(); for(int i = 0; i < stage.Subroutines.count; i++) subs->addTopLevelItem(new RDTreeWidgetItem({i, stage.Subroutines[i]})); subs->clearSelection(); - subs->setUpdatesEnabled(true); + subs->endUpdate(); subs->verticalScrollBar()->setValue(vs); subs->parentWidget()->setVisible(!stage.Subroutines.empty()); vs = readwrites->verticalScrollBar()->value(); - readwrites->setUpdatesEnabled(false); + readwrites->beginUpdate(); readwrites->clear(); for(int i = 0; shaderDetails && i < shaderDetails->ReadWriteResources.count; i++) { @@ -1017,7 +1017,7 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * } } readwrites->clearSelection(); - readwrites->setUpdatesEnabled(true); + readwrites->endUpdate(); readwrites->verticalScrollBar()->setValue(vs); readwrites->parentWidget()->setVisible(readwrites->invisibleRootItem()->childCount() > 0); @@ -1108,7 +1108,7 @@ void GLPipelineStateViewer::setState() int vs = 0; vs = ui->viAttrs->verticalScrollBar()->value(); - ui->viAttrs->setUpdatesEnabled(false); + ui->viAttrs->beginUpdate(); ui->viAttrs->clear(); { int i = 0; @@ -1158,7 +1158,7 @@ void GLPipelineStateViewer::setState() } } ui->viAttrs->clearSelection(); - ui->viAttrs->setUpdatesEnabled(true); + ui->viAttrs->endUpdate(); ui->viAttrs->verticalScrollBar()->setValue(vs); Topology topo = draw ? draw->topology : Topology::Unknown; @@ -1192,7 +1192,7 @@ void GLPipelineStateViewer::setState() } vs = ui->viBuffers->verticalScrollBar()->value(); - ui->viBuffers->setUpdatesEnabled(false); + ui->viBuffers->beginUpdate(); ui->viBuffers->clear(); if(state.m_VtxIn.ibuffer != ResourceId()) @@ -1293,7 +1293,7 @@ void GLPipelineStateViewer::setState() } } ui->viBuffers->clearSelection(); - ui->viBuffers->setUpdatesEnabled(true); + ui->viBuffers->endUpdate(); ui->viBuffers->verticalScrollBar()->setValue(vs); setShaderState(state.m_VS, ui->vsShader, ui->vsTextures, ui->vsSamplers, ui->vsUBOs, @@ -1310,7 +1310,7 @@ void GLPipelineStateViewer::setState() ui->csSubroutines, ui->csReadWrite); vs = ui->gsFeedback->verticalScrollBar()->value(); - ui->gsFeedback->setUpdatesEnabled(false); + ui->gsFeedback->beginUpdate(); ui->gsFeedback->clear(); if(state.m_Feedback.Active) { @@ -1356,7 +1356,7 @@ void GLPipelineStateViewer::setState() } ui->gsFeedback->verticalScrollBar()->setValue(vs); ui->gsFeedback->clearSelection(); - ui->gsFeedback->setUpdatesEnabled(true); + ui->gsFeedback->endUpdate(); ui->gsFeedback->setVisible(state.m_Feedback.Active); ui->xfbGroup->setVisible(state.m_Feedback.Active); @@ -1365,7 +1365,7 @@ void GLPipelineStateViewer::setState() // Rasterizer vs = ui->viewports->verticalScrollBar()->value(); - ui->viewports->setUpdatesEnabled(false); + ui->viewports->beginUpdate(); ui->viewports->clear(); { @@ -1431,12 +1431,12 @@ void GLPipelineStateViewer::setState() } ui->viewports->verticalScrollBar()->setValue(vs); ui->viewports->clearSelection(); - ui->viewports->setUpdatesEnabled(true); + ui->viewports->endUpdate(); bool anyScissorEnable = false; vs = ui->scissors->verticalScrollBar()->value(); - ui->scissors->setUpdatesEnabled(false); + ui->scissors->beginUpdate(); ui->scissors->clear(); { // accumulate identical scissors to save on visual repetition @@ -1507,7 +1507,7 @@ void GLPipelineStateViewer::setState() } ui->scissors->clearSelection(); ui->scissors->verticalScrollBar()->setValue(vs); - ui->scissors->setUpdatesEnabled(true); + ui->scissors->endUpdate(); ui->fillMode->setText(ToQStr(state.m_Rasterizer.m_State.fillMode)); ui->cullMode->setText(ToQStr(state.m_Rasterizer.m_State.cullMode)); @@ -1610,7 +1610,7 @@ void GLPipelineStateViewer::setState() bool targets[32] = {}; vs = ui->framebuffer->verticalScrollBar()->value(); - ui->framebuffer->setUpdatesEnabled(false); + ui->framebuffer->beginUpdate(); ui->framebuffer->clear(); { int i = 0; @@ -1773,11 +1773,11 @@ void GLPipelineStateViewer::setState() } ui->framebuffer->clearSelection(); - ui->framebuffer->setUpdatesEnabled(true); + ui->framebuffer->endUpdate(); ui->framebuffer->verticalScrollBar()->setValue(vs); vs = ui->blends->verticalScrollBar()->value(); - ui->blends->setUpdatesEnabled(false); + ui->blends->beginUpdate(); ui->blends->clear(); { bool logic = state.m_FB.m_Blending.Blends[0].Logic != LogicOp::NoOp; @@ -1841,7 +1841,7 @@ void GLPipelineStateViewer::setState() } } ui->blends->clearSelection(); - ui->blends->setUpdatesEnabled(true); + ui->blends->endUpdate(); ui->blends->verticalScrollBar()->setValue(vs); ui->blendFactor->setText(QFormatStr("%1, %2, %3, %4") @@ -1866,7 +1866,7 @@ void GLPipelineStateViewer::setState() ui->depthBounds->setPixmap(cross); } - ui->stencils->setUpdatesEnabled(false); + ui->stencils->beginUpdate(); ui->stencils->clear(); if(state.m_StencilState.StencilEnable) { @@ -1896,7 +1896,7 @@ void GLPipelineStateViewer::setState() {tr("Back"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-")})); } ui->stencils->clearSelection(); - ui->stencils->setUpdatesEnabled(true); + ui->stencils->endUpdate(); // highlight the appropriate stages in the flowchart if(draw == NULL) diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 15e6ed857..2bdcd213c 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -1234,7 +1234,7 @@ void VulkanPipelineStateViewer::setShaderState(const VKPipe::Shader &stage, ubos->hideColumn(0); vs = resources->verticalScrollBar()->value(); - resources->setUpdatesEnabled(false); + resources->beginUpdate(); resources->clear(); QMap samplers; @@ -1312,11 +1312,11 @@ void VulkanPipelineStateViewer::setShaderState(const VKPipe::Shader &stage, } resources->clearSelection(); - resources->setUpdatesEnabled(true); + resources->endUpdate(); resources->verticalScrollBar()->setValue(vs); vs = ubos->verticalScrollBar()->value(); - ubos->setUpdatesEnabled(false); + ubos->beginUpdate(); ubos->clear(); for(int bindset = 0; bindset < pipe.DescSets.count; bindset++) { @@ -1386,7 +1386,7 @@ void VulkanPipelineStateViewer::setShaderState(const VKPipe::Shader &stage, } } ubos->clearSelection(); - ubos->setUpdatesEnabled(true); + ubos->endUpdate(); ubos->verticalScrollBar()->setValue(vs); } @@ -1417,7 +1417,7 @@ void VulkanPipelineStateViewer::setState() int vs = 0; vs = ui->viAttrs->verticalScrollBar()->value(); - ui->viAttrs->setUpdatesEnabled(false); + ui->viAttrs->beginUpdate(); ui->viAttrs->clear(); { int i = 0; @@ -1458,7 +1458,7 @@ void VulkanPipelineStateViewer::setState() } } ui->viAttrs->clearSelection(); - ui->viAttrs->setUpdatesEnabled(true); + ui->viAttrs->endUpdate(); ui->viAttrs->verticalScrollBar()->setValue(vs); m_BindNodes.clear(); @@ -1480,7 +1480,7 @@ void VulkanPipelineStateViewer::setState() ui->primRestart->setVisible(state.IA.primitiveRestartEnable); vs = ui->viBuffers->verticalScrollBar()->value(); - ui->viBuffers->setUpdatesEnabled(false); + ui->viBuffers->beginUpdate(); ui->viBuffers->clear(); bool ibufferUsed = draw != NULL && (draw->flags & DrawFlags::UseIBuffer); @@ -1631,7 +1631,7 @@ void VulkanPipelineStateViewer::setState() } } ui->viBuffers->clearSelection(); - ui->viBuffers->setUpdatesEnabled(true); + ui->viBuffers->endUpdate(); ui->viBuffers->verticalScrollBar()->setValue(vs); setShaderState(state.m_VS, state.graphics, ui->vsShader, ui->vsResources, ui->vsUBOs); @@ -1645,11 +1645,11 @@ void VulkanPipelineStateViewer::setState() // Rasterizer vs = ui->viewports->verticalScrollBar()->value(); - ui->viewports->setUpdatesEnabled(false); + ui->viewports->beginUpdate(); ui->viewports->clear(); int vs2 = ui->scissors->verticalScrollBar()->value(); - ui->scissors->setUpdatesEnabled(false); + ui->scissors->beginUpdate(); ui->scissors->clear(); if(state.Pass.renderpass.obj != ResourceId()) @@ -1685,8 +1685,8 @@ void VulkanPipelineStateViewer::setState() ui->scissors->clearSelection(); ui->scissors->verticalScrollBar()->setValue(vs2); - ui->viewports->setUpdatesEnabled(true); - ui->scissors->setUpdatesEnabled(true); + ui->viewports->endUpdate(); + ui->scissors->endUpdate(); ui->fillMode->setText(ToQStr(state.RS.fillMode)); ui->cullMode->setText(ToQStr(state.RS.cullMode)); @@ -1711,7 +1711,7 @@ void VulkanPipelineStateViewer::setState() bool targets[32] = {}; vs = ui->framebuffer->verticalScrollBar()->value(); - ui->framebuffer->setUpdatesEnabled(false); + ui->framebuffer->beginUpdate(); ui->framebuffer->clear(); { int i = 0; @@ -1828,11 +1828,11 @@ void VulkanPipelineStateViewer::setState() } ui->framebuffer->clearSelection(); - ui->framebuffer->setUpdatesEnabled(true); + ui->framebuffer->endUpdate(); ui->framebuffer->verticalScrollBar()->setValue(vs); vs = ui->blends->verticalScrollBar()->value(); - ui->blends->setUpdatesEnabled(false); + ui->blends->beginUpdate(); ui->blends->clear(); { int i = 0; @@ -1871,7 +1871,7 @@ void VulkanPipelineStateViewer::setState() } } ui->blends->clearSelection(); - ui->blends->setUpdatesEnabled(true); + ui->blends->endUpdate(); ui->blends->verticalScrollBar()->setValue(vs); ui->blendFactor->setText(QFormatStr("%1, %2, %3, %4") @@ -1898,7 +1898,7 @@ void VulkanPipelineStateViewer::setState() ui->depthBounds->setPixmap(cross); } - ui->stencils->setUpdatesEnabled(false); + ui->stencils->beginUpdate(); ui->stencils->clear(); if(state.DS.stencilTestEnable) { @@ -1923,7 +1923,7 @@ void VulkanPipelineStateViewer::setState() {tr("Back"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-")})); } ui->stencils->clearSelection(); - ui->stencils->setUpdatesEnabled(true); + ui->stencils->endUpdate(); // highlight the appropriate stages in the flowchart if(draw == NULL) diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index cb34c4854..be0d93d39 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -1256,7 +1256,7 @@ void ShaderViewer::updateDebugging() new RDTreeWidgetItem({state.outputs[i].name, lit("output"), QString()})); } - ui->variables->setUpdatesEnabled(false); + ui->variables->beginUpdate(); int v = 0; @@ -1289,7 +1289,7 @@ void ShaderViewer::updateDebugging() node->setTag(QVariant::fromValue(VariableTag(VariableCategory::Outputs, i))); } - ui->variables->setUpdatesEnabled(true); + ui->variables->endUpdate(); ui->watch->setUpdatesEnabled(false);