mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	citra-qt: Add command list view.
This commit is contained in:
		
							parent
							
								
									5d62f5d92a
								
							
						
					
					
						commit
						6893732348
					
				
					 8 changed files with 129 additions and 2 deletions
				
			
		|  | @ -3,6 +3,7 @@ set(SRCS | |||
|             debugger/callstack.cpp | ||||
|             debugger/disassembler.cpp | ||||
|             debugger/graphics.cpp | ||||
|             debugger/graphics_cmdlists.cpp | ||||
|             debugger/ramview.cpp | ||||
|             debugger/registers.cpp | ||||
|             hotkeys.cpp | ||||
|  | @ -40,6 +41,7 @@ qt4_wrap_cpp(MOC_SRCS | |||
|                         debugger/callstack.hxx | ||||
|                         debugger/disassembler.hxx | ||||
|                         debugger/graphics.hxx | ||||
|                         debugger/graphics_cmdlists.hxx | ||||
|                         debugger/registers.hxx | ||||
|                         debugger/ramview.hxx | ||||
|                         hotkeys.hxx | ||||
|  |  | |||
|  | @ -131,6 +131,7 @@ | |||
|     <ClCompile Include="config\controller_config_util.cpp" /> | ||||
|     <ClCompile Include="debugger\callstack.cpp" /> | ||||
|     <ClCompile Include="debugger\graphics.cpp" /> | ||||
|     <ClCompile Include="debugger\graphics_cmdlists.cpp" /> | ||||
|     <ClCompile Include="debugger\registers.cpp" /> | ||||
|     <ClCompile Include="debugger\disassembler.cpp" /> | ||||
|     <ClCompile Include="debugger\ramview.cpp" /> | ||||
|  | @ -146,6 +147,7 @@ | |||
|     <MOC Include="debugger\callstack.hxx" /> | ||||
|     <MOC Include="debugger\disassembler.hxx" /> | ||||
|     <MOC Include="debugger\graphics.hxx" /> | ||||
|     <MOC Include="debugger\graphics_cmdlists.hxx" /> | ||||
|     <MOC Include="debugger\ramview.hxx" /> | ||||
|     <MOC Include="debugger\registers.hxx" /> | ||||
|     <MOC Include="bootmanager.hxx" /> | ||||
|  |  | |||
|  | @ -42,6 +42,9 @@ | |||
|     <ClCompile Include="debugger\graphics.cpp"> | ||||
|       <Filter>debugger</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="debugger\graphics_cmdlists.cpp"> | ||||
|       <Filter>debugger</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="debugger\ramview.cpp"> | ||||
|       <Filter>debugger</Filter> | ||||
|     </ClCompile> | ||||
|  | @ -74,6 +77,9 @@ | |||
|     <MOC Include="debugger\graphics.hxx"> | ||||
|       <Filter>debugger</Filter> | ||||
|     </MOC> | ||||
|     <MOC Include="debugger\graphics_cmdlists.hxx"> | ||||
|       <Filter>debugger</Filter> | ||||
|     </MOC> | ||||
|     <MOC Include="debugger\ramview.hxx"> | ||||
|       <Filter>debugger</Filter> | ||||
|     </MOC> | ||||
|  |  | |||
							
								
								
									
										65
									
								
								src/citra_qt/debugger/graphics_cmdlists.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/citra_qt/debugger/graphics_cmdlists.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,65 @@ | |||
| // Copyright 2014 Citra Emulator Project
 | ||||
| // Licensed under GPLv2
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "graphics_cmdlists.hxx" | ||||
| #include <QListView> | ||||
| 
 | ||||
| extern GraphicsDebugger g_debugger; | ||||
| 
 | ||||
| GPUCommandListModel::GPUCommandListModel(QObject* parent) : QAbstractListModel(parent), row_count(0) | ||||
| { | ||||
|     connect(this, SIGNAL(CommandListCalled()), this, SLOT(OnCommandListCalledInternal()), Qt::UniqueConnection); | ||||
| } | ||||
| 
 | ||||
| int GPUCommandListModel::rowCount(const QModelIndex& parent) const | ||||
| { | ||||
|     return row_count; | ||||
| } | ||||
| 
 | ||||
| QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const | ||||
| { | ||||
|     if (!index.isValid()) | ||||
|         return QVariant(); | ||||
| 
 | ||||
|     int idx = index.row(); | ||||
|     if (role == Qt::DisplayRole) | ||||
|     { | ||||
|         QString content; | ||||
|         const GraphicsDebugger::PicaCommandList& cmdlist = command_list[idx].second; | ||||
|         for (int i = 0; i < cmdlist.size(); ++i) | ||||
|         { | ||||
|             const GraphicsDebugger::PicaCommand& cmd = cmdlist[i]; | ||||
|             for (int j = 0; j < cmd.size(); ++j) | ||||
|                 content.append(QString("%1 ").arg(cmd[j], 8, 16, QLatin1Char('0'))); | ||||
|         } | ||||
|         return QVariant(content); | ||||
|     } | ||||
|     return QVariant(); | ||||
| } | ||||
| 
 | ||||
| void GPUCommandListModel::OnCommandListCalled(const GraphicsDebugger::PicaCommandList& lst, bool is_new) | ||||
| { | ||||
|     emit CommandListCalled(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void GPUCommandListModel::OnCommandListCalledInternal() | ||||
| { | ||||
|     beginResetModel(); | ||||
| 
 | ||||
|     command_list = GetDebugger()->GetCommandLists(); | ||||
|     row_count = command_list.size(); | ||||
| 
 | ||||
|     endResetModel(); | ||||
| } | ||||
| 
 | ||||
| GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pica Command List"), parent) | ||||
| { | ||||
|     GPUCommandListModel* model = new GPUCommandListModel(this); | ||||
|     g_debugger.RegisterObserver(model); | ||||
| 
 | ||||
|     QListView* list_widget = new QListView; | ||||
|     list_widget->setModel(model); | ||||
|     setWidget(list_widget); | ||||
| } | ||||
							
								
								
									
										44
									
								
								src/citra_qt/debugger/graphics_cmdlists.hxx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/citra_qt/debugger/graphics_cmdlists.hxx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| // Copyright 2014 Citra Emulator Project
 | ||||
| // Licensed under GPLv2
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <QAbstractListModel> | ||||
| #include <QDockWidget> | ||||
| 
 | ||||
| #include "video_core/gpu_debugger.h" | ||||
| 
 | ||||
| class GPUCommandListModel : public QAbstractListModel, public GraphicsDebugger::DebuggerObserver | ||||
| { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|     GPUCommandListModel(QObject* parent); | ||||
| 
 | ||||
|     int rowCount(const QModelIndex& parent = QModelIndex()) const override; | ||||
|     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; | ||||
| 
 | ||||
| public: | ||||
|     void OnCommandListCalled(const GraphicsDebugger::PicaCommandList& lst, bool is_new) override; | ||||
| 
 | ||||
| public slots: | ||||
|     void OnCommandListCalledInternal(); | ||||
| 
 | ||||
| signals: | ||||
|     void CommandListCalled(); | ||||
| 
 | ||||
| private: | ||||
|     int row_count; | ||||
|     std::vector<std::pair<u32,GraphicsDebugger::PicaCommandList>> command_list; | ||||
| }; | ||||
| 
 | ||||
| class GPUCommandListWidget : public QDockWidget | ||||
| { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|     GPUCommandListWidget(QWidget* parent = 0); | ||||
| 
 | ||||
| private: | ||||
| }; | ||||
|  | @ -20,6 +20,7 @@ | |||
| #include "debugger/callstack.hxx" | ||||
| #include "debugger/ramview.hxx" | ||||
| #include "debugger/graphics.hxx" | ||||
| #include "debugger/graphics_cmdlists.hxx" | ||||
| 
 | ||||
| #include "core/system.h" | ||||
| #include "core/loader.h" | ||||
|  | @ -52,11 +53,16 @@ GMainWindow::GMainWindow() | |||
|     addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); | ||||
|     callstackWidget->hide(); | ||||
| 
 | ||||
|     graphicsCommandsWidget = new GPUCommandListWidget(this); | ||||
|     addDockWidget(Qt::RightDockWidgetArea, graphicsCommandsWidget); | ||||
|     callstackWidget->hide(); | ||||
| 
 | ||||
|     QMenu* debug_menu = ui.menu_View->addMenu(tr("Debugging")); | ||||
|     debug_menu->addAction(disasmWidget->toggleViewAction()); | ||||
|     debug_menu->addAction(registersWidget->toggleViewAction()); | ||||
|     debug_menu->addAction(callstackWidget->toggleViewAction()); | ||||
|     debug_menu->addAction(graphicsWidget->toggleViewAction()); | ||||
|     debug_menu->addAction(graphicsCommandsWidget->toggleViewAction()); | ||||
| 
 | ||||
|     // Set default UI state
 | ||||
|     // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half
 | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ class DisassemblerWidget; | |||
| class RegistersWidget; | ||||
| class CallstackWidget; | ||||
| class GPUCommandStreamWidget; | ||||
| class GPUCommandListWidget; | ||||
| 
 | ||||
| class GMainWindow : public QMainWindow | ||||
| { | ||||
|  | @ -52,6 +53,7 @@ private: | |||
|     RegistersWidget* registersWidget; | ||||
|     CallstackWidget* callstackWidget; | ||||
|     GPUCommandStreamWidget* graphicsWidget; | ||||
|     GPUCommandListWidget* graphicsCommandsWidget; | ||||
| }; | ||||
| 
 | ||||
| #endif // _CITRA_QT_MAIN_HXX_
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue