mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Some code cleanup.
This commit is contained in:
		
							parent
							
								
									55ce9aca71
								
							
						
					
					
						commit
						0cd27a511e
					
				
					 8 changed files with 66 additions and 67 deletions
				
			
		|  | @ -27,6 +27,7 @@ set(HEADERS | ||||||
|             debugger/disassembler.hxx |             debugger/disassembler.hxx | ||||||
|             debugger/graphics.hxx |             debugger/graphics.hxx | ||||||
|             debugger/graphics_breakpoints.hxx |             debugger/graphics_breakpoints.hxx | ||||||
|  |             debugger/graphics_breakpoints_p.hxx | ||||||
|             debugger/graphics_cmdlists.hxx |             debugger/graphics_cmdlists.hxx | ||||||
|             debugger/graphics_framebuffer.hxx |             debugger/graphics_framebuffer.hxx | ||||||
|             debugger/ramview.hxx |             debugger/ramview.hxx | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ | ||||||
| #include <QLabel> | #include <QLabel> | ||||||
| 
 | 
 | ||||||
| #include "graphics_breakpoints.hxx" | #include "graphics_breakpoints.hxx" | ||||||
|  | #include "graphics_breakpoints_p.hxx" | ||||||
| 
 | 
 | ||||||
| BreakPointModel::BreakPointModel(std::shared_ptr<Pica::DebugContext> debug_context, QObject* parent) | BreakPointModel::BreakPointModel(std::shared_ptr<Pica::DebugContext> debug_context, QObject* parent) | ||||||
|     : QAbstractListModel(parent), context_weak(debug_context), |     : QAbstractListModel(parent), context_weak(debug_context), | ||||||
|  | @ -39,7 +40,7 @@ QVariant BreakPointModel::data(const QModelIndex& index, int role) const | ||||||
|             std::map<Pica::DebugContext::Event, QString> map; |             std::map<Pica::DebugContext::Event, QString> map; | ||||||
|             map.insert({Pica::DebugContext::Event::CommandLoaded, tr("Pica command loaded")}); |             map.insert({Pica::DebugContext::Event::CommandLoaded, tr("Pica command loaded")}); | ||||||
|             map.insert({Pica::DebugContext::Event::CommandProcessed, tr("Pica command processed")}); |             map.insert({Pica::DebugContext::Event::CommandProcessed, tr("Pica command processed")}); | ||||||
|             map.insert({Pica::DebugContext::Event::IncomingPrimitiveBatch, tr("Incomming primitive batch")}); |             map.insert({Pica::DebugContext::Event::IncomingPrimitiveBatch, tr("Incoming primitive batch")}); | ||||||
|             map.insert({Pica::DebugContext::Event::FinishedPrimitiveBatch, tr("Finished primitive batch")}); |             map.insert({Pica::DebugContext::Event::FinishedPrimitiveBatch, tr("Finished primitive batch")}); | ||||||
| 
 | 
 | ||||||
|             _dbg_assert_(GPU, map.size() == static_cast<size_t>(Pica::DebugContext::Event::NumEvents)); |             _dbg_assert_(GPU, map.size() == static_cast<size_t>(Pica::DebugContext::Event::NumEvents)); | ||||||
|  |  | ||||||
|  | @ -15,32 +15,7 @@ class QLabel; | ||||||
| class QPushButton; | class QPushButton; | ||||||
| class QTreeView; | class QTreeView; | ||||||
| 
 | 
 | ||||||
| class BreakPointModel : public QAbstractListModel { | class BreakPointModel; | ||||||
|     Q_OBJECT |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     enum { |  | ||||||
|         Role_IsEnabled = Qt::UserRole, |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     BreakPointModel(std::shared_ptr<Pica::DebugContext> context, QObject* parent); |  | ||||||
| 
 |  | ||||||
|     int columnCount(const QModelIndex& parent = QModelIndex()) const override; |  | ||||||
|     int rowCount(const QModelIndex& parent = QModelIndex()) const override; |  | ||||||
|     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; |  | ||||||
|     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; |  | ||||||
| 
 |  | ||||||
|     bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); |  | ||||||
| 
 |  | ||||||
| public slots: |  | ||||||
|     void OnBreakPointHit(Pica::DebugContext::Event event); |  | ||||||
|     void OnResumed(); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     bool at_breakpoint; |  | ||||||
|     Pica::DebugContext::Event active_breakpoint; |  | ||||||
|     std::weak_ptr<Pica::DebugContext> context_weak; |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| class GraphicsBreakPointsWidget : public QDockWidget, Pica::DebugContext::BreakPointObserver { | class GraphicsBreakPointsWidget : public QDockWidget, Pica::DebugContext::BreakPointObserver { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|  |  | ||||||
							
								
								
									
										38
									
								
								src/citra_qt/debugger/graphics_breakpoints_p.hxx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/citra_qt/debugger/graphics_breakpoints_p.hxx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | ||||||
|  | // Copyright 2014 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <memory> | ||||||
|  | 
 | ||||||
|  | #include <QAbstractListModel> | ||||||
|  | 
 | ||||||
|  | #include "video_core/debug_utils/debug_utils.h" | ||||||
|  | 
 | ||||||
|  | class BreakPointModel : public QAbstractListModel { | ||||||
|  |     Q_OBJECT | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     enum { | ||||||
|  |         Role_IsEnabled = Qt::UserRole, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     BreakPointModel(std::shared_ptr<Pica::DebugContext> context, QObject* parent); | ||||||
|  | 
 | ||||||
|  |     int columnCount(const QModelIndex& parent = QModelIndex()) const override; | ||||||
|  |     int rowCount(const QModelIndex& parent = QModelIndex()) const override; | ||||||
|  |     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; | ||||||
|  |     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; | ||||||
|  | 
 | ||||||
|  |     bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); | ||||||
|  | 
 | ||||||
|  | public slots: | ||||||
|  |     void OnBreakPointHit(Pica::DebugContext::Event event); | ||||||
|  |     void OnResumed(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     std::weak_ptr<Pica::DebugContext> context_weak; | ||||||
|  |     bool at_breakpoint; | ||||||
|  |     Pica::DebugContext::Event active_breakpoint; | ||||||
|  | }; | ||||||
|  | @ -124,59 +124,49 @@ TextureInfoDockWidget::TextureInfoDockWidget(const Pica::DebugUtils::TextureInfo | ||||||
|     setWidget(main_widget); |     setWidget(main_widget); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TextureInfoDockWidget::OnAddressChanged(qint64 value) | void TextureInfoDockWidget::OnAddressChanged(qint64 value) { | ||||||
| { |  | ||||||
|     info.address = value; |     info.address = value; | ||||||
|     emit UpdatePixmap(ReloadPixmap()); |     emit UpdatePixmap(ReloadPixmap()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TextureInfoDockWidget::OnFormatChanged(int value) | void TextureInfoDockWidget::OnFormatChanged(int value) { | ||||||
| { |  | ||||||
|     info.format = static_cast<Pica::Regs::TextureFormat>(value); |     info.format = static_cast<Pica::Regs::TextureFormat>(value); | ||||||
|     emit UpdatePixmap(ReloadPixmap()); |     emit UpdatePixmap(ReloadPixmap()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TextureInfoDockWidget::OnWidthChanged(int value) | void TextureInfoDockWidget::OnWidthChanged(int value) { | ||||||
| { |  | ||||||
|     info.width = value; |     info.width = value; | ||||||
|     emit UpdatePixmap(ReloadPixmap()); |     emit UpdatePixmap(ReloadPixmap()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TextureInfoDockWidget::OnHeightChanged(int value) | void TextureInfoDockWidget::OnHeightChanged(int value) { | ||||||
| { |  | ||||||
|     info.height = value; |     info.height = value; | ||||||
|     emit UpdatePixmap(ReloadPixmap()); |     emit UpdatePixmap(ReloadPixmap()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TextureInfoDockWidget::OnStrideChanged(int value) | void TextureInfoDockWidget::OnStrideChanged(int value) { | ||||||
| { |  | ||||||
|     info.stride = value; |     info.stride = value; | ||||||
|     emit UpdatePixmap(ReloadPixmap()); |     emit UpdatePixmap(ReloadPixmap()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| QPixmap TextureInfoDockWidget::ReloadPixmap() const | QPixmap TextureInfoDockWidget::ReloadPixmap() const { | ||||||
| { |  | ||||||
|     u8* src = Memory::GetPointer(info.address); |     u8* src = Memory::GetPointer(info.address); | ||||||
|     return QPixmap::fromImage(LoadTexture(src, info)); |     return QPixmap::fromImage(LoadTexture(src, info)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| GPUCommandListModel::GPUCommandListModel(QObject* parent) : QAbstractListModel(parent) | GPUCommandListModel::GPUCommandListModel(QObject* parent) : QAbstractListModel(parent) { | ||||||
| { |  | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int GPUCommandListModel::rowCount(const QModelIndex& parent) const | int GPUCommandListModel::rowCount(const QModelIndex& parent) const { | ||||||
| { |  | ||||||
|     return pica_trace.writes.size(); |     return pica_trace.writes.size(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int GPUCommandListModel::columnCount(const QModelIndex& parent) const | int GPUCommandListModel::columnCount(const QModelIndex& parent) const { | ||||||
| { |  | ||||||
|     return 2; |     return 2; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const | QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const { | ||||||
| { |  | ||||||
|     if (!index.isValid()) |     if (!index.isValid()) | ||||||
|         return QVariant(); |         return QVariant(); | ||||||
| 
 | 
 | ||||||
|  | @ -202,8 +192,7 @@ QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const | ||||||
|     return QVariant(); |     return QVariant(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| QVariant GPUCommandListModel::headerData(int section, Qt::Orientation orientation, int role) const | QVariant GPUCommandListModel::headerData(int section, Qt::Orientation orientation, int role) const { | ||||||
| { |  | ||||||
|     switch(role) { |     switch(role) { | ||||||
|     case Qt::DisplayRole: |     case Qt::DisplayRole: | ||||||
|     { |     { | ||||||
|  | @ -220,8 +209,7 @@ QVariant GPUCommandListModel::headerData(int section, Qt::Orientation orientatio | ||||||
|     return QVariant(); |     return QVariant(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GPUCommandListModel::OnPicaTraceFinished(const Pica::DebugUtils::PicaTrace& trace) | void GPUCommandListModel::OnPicaTraceFinished(const Pica::DebugUtils::PicaTrace& trace) { | ||||||
| { |  | ||||||
|     beginResetModel(); |     beginResetModel(); | ||||||
| 
 | 
 | ||||||
|     pica_trace = trace; |     pica_trace = trace; | ||||||
|  | @ -233,20 +221,19 @@ void GPUCommandListModel::OnPicaTraceFinished(const Pica::DebugUtils::PicaTrace& | ||||||
|     (cmd_id >= PICA_REG_INDEX(reg_name) &&   \ |     (cmd_id >= PICA_REG_INDEX(reg_name) &&   \ | ||||||
|      cmd_id < PICA_REG_INDEX(reg_name) + sizeof(decltype(Pica::registers.reg_name)) / 4) |      cmd_id < PICA_REG_INDEX(reg_name) + sizeof(decltype(Pica::registers.reg_name)) / 4) | ||||||
| 
 | 
 | ||||||
| void GPUCommandListWidget::OnCommandDoubleClicked(const QModelIndex& index) | void GPUCommandListWidget::OnCommandDoubleClicked(const QModelIndex& index) { | ||||||
| { |  | ||||||
| 
 |  | ||||||
|     const int command_id = list_widget->model()->data(index, GPUCommandListModel::CommandIdRole).toInt(); |     const int command_id = list_widget->model()->data(index, GPUCommandListModel::CommandIdRole).toInt(); | ||||||
|     if (COMMAND_IN_RANGE(command_id, texture0)) { |     if (COMMAND_IN_RANGE(command_id, texture0)) { | ||||||
|         auto info = Pica::DebugUtils::TextureInfo::FromPicaRegister(Pica::registers.texture0, |         auto info = Pica::DebugUtils::TextureInfo::FromPicaRegister(Pica::registers.texture0, | ||||||
|                                                                     Pica::registers.texture0_format); |                                                                     Pica::registers.texture0_format); | ||||||
|         QMainWindow* main_window = (QMainWindow*)parent(); | 
 | ||||||
|  |         // TODO: Instead, emit a signal here to be caught by the main window widget.
 | ||||||
|  |         auto main_window = static_cast<QMainWindow*>(parent()); | ||||||
|         main_window->tabifyDockWidget(this, new TextureInfoDockWidget(info, main_window)); |         main_window->tabifyDockWidget(this, new TextureInfoDockWidget(info, main_window)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) | void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) { | ||||||
| { |  | ||||||
|     QWidget* new_info_widget; |     QWidget* new_info_widget; | ||||||
| 
 | 
 | ||||||
|     const int command_id = list_widget->model()->data(index, GPUCommandListModel::CommandIdRole).toInt(); |     const int command_id = list_widget->model()->data(index, GPUCommandListModel::CommandIdRole).toInt(); | ||||||
|  | @ -266,8 +253,7 @@ void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) | ||||||
| } | } | ||||||
| #undef COMMAND_IN_RANGE | #undef COMMAND_IN_RANGE | ||||||
| 
 | 
 | ||||||
| GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pica Command List"), parent) | GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pica Command List"), parent) { | ||||||
| { |  | ||||||
|     setObjectName("Pica Command List"); |     setObjectName("Pica Command List"); | ||||||
|     GPUCommandListModel* model = new GPUCommandListModel(this); |     GPUCommandListModel* model = new GPUCommandListModel(this); | ||||||
| 
 | 
 | ||||||
|  | @ -283,7 +269,6 @@ GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pi | ||||||
|     connect(list_widget, SIGNAL(doubleClicked(const QModelIndex&)), |     connect(list_widget, SIGNAL(doubleClicked(const QModelIndex&)), | ||||||
|             this, SLOT(OnCommandDoubleClicked(const QModelIndex&))); |             this, SLOT(OnCommandDoubleClicked(const QModelIndex&))); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     toggle_tracing = new QPushButton(tr("Start Tracing")); |     toggle_tracing = new QPushButton(tr("Start Tracing")); | ||||||
| 
 | 
 | ||||||
|     connect(toggle_tracing, SIGNAL(clicked()), this, SLOT(OnToggleTracing())); |     connect(toggle_tracing, SIGNAL(clicked()), this, SLOT(OnToggleTracing())); | ||||||
|  | @ -301,8 +286,7 @@ GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pi | ||||||
|     setWidget(main_widget); |     setWidget(main_widget); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GPUCommandListWidget::OnToggleTracing() | void GPUCommandListWidget::OnToggleTracing() { | ||||||
| { |  | ||||||
|     if (!Pica::DebugUtils::IsPicaTracing()) { |     if (!Pica::DebugUtils::IsPicaTracing()) { | ||||||
|         Pica::DebugUtils::StartPicaTracing(); |         Pica::DebugUtils::StartPicaTracing(); | ||||||
|         toggle_tracing->setText(tr("Stop Tracing")); |         toggle_tracing->setText(tr("Stop Tracing")); | ||||||
|  |  | ||||||
|  | @ -217,11 +217,11 @@ void GraphicsFramebufferWidget::OnUpdate() | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     // TODO: Implement a good way to visualize alpha components!
 | ||||||
|  |     // TODO: Unify this decoding code with the texture decoder
 | ||||||
|     switch (framebuffer_format) { |     switch (framebuffer_format) { | ||||||
|     case Format::RGBA8: |     case Format::RGBA8: | ||||||
|     { |     { | ||||||
|         // TODO: Implement a good way to visualize the alpha component
 |  | ||||||
| 
 |  | ||||||
|         QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); |         QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); | ||||||
|         u32* color_buffer = (u32*)Memory::GetPointer(framebuffer_address); |         u32* color_buffer = (u32*)Memory::GetPointer(framebuffer_address); | ||||||
|         for (int y = 0; y < framebuffer_height; ++y) { |         for (int y = 0; y < framebuffer_height; ++y) { | ||||||
|  |  | ||||||
|  | @ -39,6 +39,8 @@ template<> struct CompileTimeAssert<true> {}; | ||||||
| #include <sys/endian.h> | #include <sys/endian.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #include "common_types.h" | ||||||
|  | 
 | ||||||
| // go to debugger mode
 | // go to debugger mode
 | ||||||
|     #ifdef GEKKO |     #ifdef GEKKO | ||||||
|         #define Crash() |         #define Crash() | ||||||
|  |  | ||||||
|  | @ -2,8 +2,6 @@ | ||||||
| // Licensed under GPLv2
 | // Licensed under GPLv2
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <cassert> |  | ||||||
| 
 |  | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <condition_variable> | #include <condition_variable> | ||||||
| #include <list> | #include <list> | ||||||
|  | @ -359,7 +357,7 @@ std::unique_ptr<PicaTrace> FinishPicaTracing() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const TextureInfo& info) { | const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const TextureInfo& info) { | ||||||
|     assert(info.format == Pica::Regs::TextureFormat::RGB8); |     _dbg_assert_(GPU, info.format == Pica::Regs::TextureFormat::RGB8); | ||||||
| 
 | 
 | ||||||
|     // Cf. rasterizer code for an explanation of this algorithm.
 |     // Cf. rasterizer code for an explanation of this algorithm.
 | ||||||
|     int texel_index_within_tile = 0; |     int texel_index_within_tile = 0; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue