diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index ed6844999..738f42072 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -805,6 +805,18 @@ void D3D11PipelineStateViewer::clearState() clearShaderState(ui->psShader, ui->psResources, ui->psSamplers, ui->psCBuffers, ui->psClasses); clearShaderState(ui->csShader, ui->csResources, ui->csSamplers, ui->csCBuffers, ui->csClasses); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->hsShaderViewButton, ui->dsShaderViewButton, + ui->gsShaderViewButton, ui->psShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->hsShaderEditButton, ui->dsShaderEditButton, + ui->gsShaderEditButton, ui->psShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->hsShaderSaveButton, ui->dsShaderSaveButton, + ui->gsShaderSaveButton, ui->psShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + b->setEnabled(false); + ui->csUAVs->clear(); const QPixmap &tick = Pixmaps::tick(this); @@ -849,6 +861,18 @@ void D3D11PipelineStateViewer::clearState() ui->stencils->clear(); ui->predicateGroup->setVisible(false); + + { + ui->groupX->setEnabled(false); + ui->groupY->setEnabled(false); + ui->groupZ->setEnabled(false); + + ui->threadX->setEnabled(false); + ui->threadY->setEnabled(false); + ui->threadZ->setEnabled(false); + + ui->debugThread->setEnabled(false); + } } void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, RDLabel *shader, @@ -1409,6 +1433,25 @@ void D3D11PipelineStateViewer::setState() setShaderState(state.computeShader, ui->csShader, ui->csResources, ui->csSamplers, ui->csCBuffers, ui->csClasses); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->hsShaderViewButton, ui->dsShaderViewButton, + ui->gsShaderViewButton, ui->psShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->hsShaderEditButton, ui->dsShaderEditButton, + ui->gsShaderEditButton, ui->psShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->hsShaderSaveButton, ui->dsShaderSaveButton, + ui->gsShaderSaveButton, ui->psShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + { + const D3D11Pipe::Shader *stage = stageForSender(b); + + if(stage == NULL || stage->resourceId == ResourceId()) + continue; + + b->setEnabled(stage->reflection); + } + vs = ui->csUAVs->verticalScrollBar()->value(); ui->csUAVs->beginUpdate(); ui->csUAVs->clear(); diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index bc3e85a80..bf3725432 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -902,6 +902,18 @@ void D3D12PipelineStateViewer::clearState() clearShaderState(ui->csShader, ui->csRootSig, ui->csResources, ui->csSamplers, ui->csCBuffers, ui->csUAVs); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->hsShaderViewButton, ui->dsShaderViewButton, + ui->gsShaderViewButton, ui->psShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->hsShaderEditButton, ui->dsShaderEditButton, + ui->gsShaderEditButton, ui->psShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->hsShaderSaveButton, ui->dsShaderSaveButton, + ui->gsShaderSaveButton, ui->psShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + b->setEnabled(false); + const QPixmap &tick = Pixmaps::tick(this); const QPixmap &cross = Pixmaps::cross(this); @@ -1439,6 +1451,25 @@ void D3D12PipelineStateViewer::setState() setShaderState(state.computeShader, ui->csShader, ui->csRootSig, ui->csResources, ui->csSamplers, ui->csCBuffers, ui->csUAVs); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->hsShaderViewButton, ui->dsShaderViewButton, + ui->gsShaderViewButton, ui->psShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->hsShaderEditButton, ui->dsShaderEditButton, + ui->gsShaderEditButton, ui->psShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->hsShaderSaveButton, ui->dsShaderSaveButton, + ui->gsShaderSaveButton, ui->psShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + { + const D3D12Pipe::Shader *stage = stageForSender(b); + + if(stage == NULL || stage->resourceId == ResourceId()) + continue; + + b->setEnabled(stage->reflection && state.pipelineResourceId != ResourceId()); + } + bool streamoutSet = false; vs = ui->gsStreamOut->verticalScrollBar()->value(); ui->gsStreamOut->beginUpdate(); diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 63adaf822..74b820c39 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -540,6 +540,18 @@ void GLPipelineStateViewer::clearState() clearShaderState(ui->csShader, ui->csTextures, ui->csSamplers, ui->csUBOs, ui->csSubroutines, ui->csReadWrite); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->tcsShaderViewButton, ui->tesShaderViewButton, + ui->gsShaderViewButton, ui->fsShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->tcsShaderEditButton, ui->tesShaderEditButton, + ui->gsShaderEditButton, ui->fsShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->tcsShaderSaveButton, ui->tesShaderSaveButton, + ui->gsShaderSaveButton, ui->fsShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + b->setEnabled(false); + const QPixmap &tick = Pixmaps::tick(this); const QPixmap &cross = Pixmaps::cross(this); @@ -1354,6 +1366,27 @@ void GLPipelineStateViewer::setState() setShaderState(state.computeShader, ui->csShader, ui->csTextures, ui->csSamplers, ui->csUBOs, ui->csSubroutines, ui->csReadWrite); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->tcsShaderViewButton, ui->tesShaderViewButton, + ui->gsShaderViewButton, ui->fsShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->tcsShaderEditButton, ui->tesShaderEditButton, + ui->gsShaderEditButton, ui->fsShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->tcsShaderSaveButton, ui->tesShaderSaveButton, + ui->gsShaderSaveButton, ui->fsShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + { + const GLPipe::Shader *stage = stageForSender(b); + + if(stage == NULL || stage->shaderResourceId == ResourceId()) + continue; + + ShaderReflection *shaderDetails = stage->reflection; + + b->setEnabled(shaderDetails); + } + vs = ui->xfbBuffers->verticalScrollBar()->value(); ui->xfbBuffers->beginUpdate(); ui->xfbBuffers->clear(); diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 3958a7d5b..f737e6626 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -560,6 +560,18 @@ void VulkanPipelineStateViewer::clearState() clearShaderState(ui->fsShader, ui->fsResources, ui->fsUBOs); clearShaderState(ui->csShader, ui->csResources, ui->csUBOs); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->tcsShaderViewButton, ui->tesShaderViewButton, + ui->gsShaderViewButton, ui->fsShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->tcsShaderEditButton, ui->tesShaderEditButton, + ui->gsShaderEditButton, ui->fsShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->tcsShaderSaveButton, ui->tesShaderSaveButton, + ui->gsShaderSaveButton, ui->fsShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + b->setEnabled(false); + const QPixmap &tick = Pixmaps::tick(this); ui->fillMode->setText(tr("Solid", "Fill Mode")); @@ -1737,6 +1749,30 @@ void VulkanPipelineStateViewer::setState() setShaderState(state.fragmentShader, state.graphics, ui->fsShader, ui->fsResources, ui->fsUBOs); setShaderState(state.computeShader, state.compute, ui->csShader, ui->csResources, ui->csUBOs); + QToolButton *shaderButtons[] = { + ui->vsShaderViewButton, ui->tcsShaderViewButton, ui->tesShaderViewButton, + ui->gsShaderViewButton, ui->fsShaderViewButton, ui->csShaderViewButton, + ui->vsShaderEditButton, ui->tcsShaderEditButton, ui->tesShaderEditButton, + ui->gsShaderEditButton, ui->fsShaderEditButton, ui->csShaderEditButton, + ui->vsShaderSaveButton, ui->tcsShaderSaveButton, ui->tesShaderSaveButton, + ui->gsShaderSaveButton, ui->fsShaderSaveButton, ui->csShaderSaveButton, + }; + + for(QToolButton *b : shaderButtons) + { + const VKPipe::Shader *stage = stageForSender(b); + + if(stage == NULL || stage->resourceId == ResourceId()) + continue; + + ShaderReflection *shaderDetails = stage->reflection; + + ResourceId pipe = stage->stage == ShaderStage::Compute ? state.compute.pipelineResourceId + : state.graphics.pipelineResourceId; + + b->setEnabled(shaderDetails && pipe != ResourceId()); + } + //////////////////////////////////////////////// // Rasterizer