From 6893732348c3689b094c2e9749f8eb9e877028b8 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sun, 18 May 2014 17:52:22 +0200 Subject: citra-qt: Add command list view. --- src/citra_qt/debugger/graphics_cmdlists.cpp | 65 +++++++++++++++++++++++++++++ src/citra_qt/debugger/graphics_cmdlists.hxx | 44 +++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/citra_qt/debugger/graphics_cmdlists.cpp create mode 100644 src/citra_qt/debugger/graphics_cmdlists.hxx (limited to 'src/citra_qt/debugger') diff --git a/src/citra_qt/debugger/graphics_cmdlists.cpp b/src/citra_qt/debugger/graphics_cmdlists.cpp new file mode 100644 index 00000000..576882e8 --- /dev/null +++ b/src/citra_qt/debugger/graphics_cmdlists.cpp @@ -0,0 +1,65 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "graphics_cmdlists.hxx" +#include + +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); +} diff --git a/src/citra_qt/debugger/graphics_cmdlists.hxx b/src/citra_qt/debugger/graphics_cmdlists.hxx new file mode 100644 index 00000000..bac23c64 --- /dev/null +++ b/src/citra_qt/debugger/graphics_cmdlists.hxx @@ -0,0 +1,44 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#pragma once + +#include +#include + +#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> command_list; +}; + +class GPUCommandListWidget : public QDockWidget +{ + Q_OBJECT + +public: + GPUCommandListWidget(QWidget* parent = 0); + +private: +}; -- cgit v1.2.3