diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index d11915337..889813c2a 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -209,6 +209,8 @@ void ShaderViewer::editShader(bool customShader, const QString &entryPoint, cons ui->regFormatSep->hide(); ui->intView->hide(); ui->floatView->hide(); + ui->debugToggleSep->hide(); + ui->debugToggle->hide(); // hide signatures ui->inputSig->hide(); @@ -407,6 +409,12 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR ui->inputSig->hide(); ui->outputSig->hide(); + if(shader->debugInfo.files.isEmpty()) + { + ui->debugToggle->setEnabled(false); + ui->debugToggle->setText(tr("HLSL Unavailable")); + } + ui->registers->setColumns({tr("Name"), tr("Type"), tr("Value")}); ui->registers->header()->setSectionResizeMode(0, QHeaderView::Interactive); ui->registers->header()->setSectionResizeMode(1, QHeaderView::Interactive); @@ -571,6 +579,8 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR ui->regFormatSep->hide(); ui->intView->hide(); ui->floatView->hide(); + ui->debugToggleSep->hide(); + ui->debugToggle->hide(); // show input and output signatures ui->inputSig->setColumns( @@ -706,6 +716,21 @@ void ShaderViewer::updateWindowTitle() } } +void ShaderViewer::gotoSourceDebugging() +{ + if(m_CurInstructionScintilla) + { + ToolWindowManager::raiseToolWindow(m_CurInstructionScintilla); + m_CurInstructionScintilla->setFocus(Qt::MouseFocusReason); + } +} + +void ShaderViewer::gotoDisassemblyDebugging() +{ + ToolWindowManager::raiseToolWindow(m_DisassemblyFrame); + m_DisassemblyFrame->setFocus(Qt::MouseFocusReason); +} + ShaderViewer::~ShaderViewer() { // don't want to async invoke while using 'this', so save the trace separately @@ -849,16 +874,10 @@ void ShaderViewer::debug_contextMenu(const QPoint &pos) QAction gotoOther(isDisasm ? tr("Go to Source") : tr("Go to Disassembly"), this); QObject::connect(&gotoOther, &QAction::triggered, [this, isDisasm]() { - if(isDisasm && m_CurInstructionScintilla) - { - ToolWindowManager::raiseToolWindow(m_CurInstructionScintilla); - m_CurInstructionScintilla->setFocus(Qt::MouseFocusReason); - } - else if(!isDisasm) - { - ToolWindowManager::raiseToolWindow(m_DisassemblyFrame); - m_DisassemblyFrame->setFocus(Qt::MouseFocusReason); - } + if(isDisasm) + gotoSourceDebugging(); + else + gotoDisassemblyDebugging(); updateDebugging(); }); @@ -1529,6 +1548,14 @@ void ShaderViewer::updateDebugging() if(!m_Trace || m_CurrentStep < 0 || m_CurrentStep >= m_Trace->states.count()) return; + if(ui->debugToggle->isEnabled()) + { + if(isSourceDebugging()) + ui->debugToggle->setText(tr("Debug in Assembly")); + else + ui->debugToggle->setText(tr("Debug in HLSL")); + } + const ShaderDebugState &state = m_Trace->states[m_CurrentStep]; uint32_t nextInst = state.nextInstruction; @@ -3041,6 +3068,16 @@ void ShaderViewer::on_floatView_clicked() updateDebugging(); } +void ShaderViewer::on_debugToggle_clicked() +{ + if(isSourceDebugging()) + gotoDisassemblyDebugging(); + else + gotoSourceDebugging(); + + updateDebugging(); +} + ScintillaEdit *ShaderViewer::currentScintilla() { ScintillaEdit *cur = qobject_cast(QApplication::focusWidget()); diff --git a/qrenderdoc/Windows/ShaderViewer.h b/qrenderdoc/Windows/ShaderViewer.h index 7dfc482a8..7e37acef9 100644 --- a/qrenderdoc/Windows/ShaderViewer.h +++ b/qrenderdoc/Windows/ShaderViewer.h @@ -112,6 +112,7 @@ private slots: void on_refresh_clicked(); void on_intView_clicked(); void on_floatView_clicked(); + void on_debugToggle_clicked(); void on_watch_itemChanged(QTableWidgetItem *item); @@ -158,6 +159,8 @@ private: void getRegisterFromWord(const QString &text, VariableCategory &varCat, int &varIdx, int &arrayIdx); void updateWindowTitle(); + void gotoSourceDebugging(); + void gotoDisassemblyDebugging(); void showVariableTooltip(VariableCategory varCat, int varIdx, int arrayIdx); void showVariableTooltip(QString name); diff --git a/qrenderdoc/Windows/ShaderViewer.ui b/qrenderdoc/Windows/ShaderViewer.ui index 17bef4ffb..1e7a7e31a 100644 --- a/qrenderdoc/Windows/ShaderViewer.ui +++ b/qrenderdoc/Windows/ShaderViewer.ui @@ -205,7 +205,7 @@ - + Qt::Vertical @@ -255,7 +255,7 @@ - + Qt::Vertical @@ -321,6 +321,13 @@ + + + + Qt::Vertical + + + @@ -341,13 +348,6 @@ - - - - Qt::Vertical - - - @@ -427,7 +427,7 @@ - + Qt::Vertical @@ -465,6 +465,32 @@ + + + + Qt::Vertical + + + + + + + + 23 + 22 + + + + Change the debugging view + + + Debug Toggle + + + true + + +