Further refine GPU command list debugging.

This commit is contained in:
Tony Wasserka 2014-05-18 21:18:38 +02:00 committed by bunnei
parent b0051b2203
commit f82410e633
3 changed files with 27 additions and 4 deletions

View File

@ -53,7 +53,7 @@ int GPUCommandListModel::rowCount(const QModelIndex& parent) const
int GPUCommandListModel::columnCount(const QModelIndex& parent) const int GPUCommandListModel::columnCount(const QModelIndex& parent) const
{ {
return 1; return 2;
} }
QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const
@ -68,7 +68,7 @@ QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const
const GraphicsDebugger::PicaCommandList& cmdlist = command_lists[item->index].second; const GraphicsDebugger::PicaCommandList& cmdlist = command_lists[item->index].second;
u32 address = command_lists[item->index].first; u32 address = command_lists[item->index].first;
if (role == Qt::DisplayRole) if (role == Qt::DisplayRole && index.column() == 0)
{ {
return QVariant(QString("0x%1 bytes at 0x%2").arg(cmdlist.size(), 0, 16).arg(address, 8, 16, QLatin1Char('0'))); return QVariant(QString("0x%1 bytes at 0x%2").arg(cmdlist.size(), 0, 16).arg(address, 8, 16, QLatin1Char('0')));
} }
@ -78,11 +78,17 @@ QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const
// index refers to a specific command // index refers to a specific command
const GraphicsDebugger::PicaCommandList& cmdlist = command_lists[item->parent->index].second; const GraphicsDebugger::PicaCommandList& cmdlist = command_lists[item->parent->index].second;
const GraphicsDebugger::PicaCommand& cmd = cmdlist[item->index]; const GraphicsDebugger::PicaCommand& cmd = cmdlist[item->index];
const Pica::CommandHeader& header = cmd.GetHeader();
if (role == Qt::DisplayRole) { if (role == Qt::DisplayRole) {
QString content; QString content;
if (index.column() == 0) {
content = Pica::command_names[header.cmd_id];
content.append(" ");
} else if (index.column() == 1) {
for (int j = 0; j < cmd.size(); ++j) for (int j = 0; j < cmd.size(); ++j)
content.append(QString("%1 ").arg(cmd[j], 8, 16, QLatin1Char('0'))); content.append(QString("%1 ").arg(cmd[j], 8, 16, QLatin1Char('0')));
}
return QVariant(content); return QVariant(content);
} }

View File

@ -100,6 +100,7 @@ public:
auto& cmd = cmdlist.back(); auto& cmd = cmdlist.back();
size_t size = 2 + header.extra_data_length; size_t size = 2 + header.extra_data_length;
size = (size + 1) / 2 * 2; // align to 8 bytes
cmd.reserve(size); cmd.reserve(size);
std::copy(parse_pointer, parse_pointer + size, std::back_inserter(cmd)); std::copy(parse_pointer, parse_pointer + size, std::back_inserter(cmd));

View File

@ -4,6 +4,9 @@
#pragma once #pragma once
#include <initializer_list>
#include <map>
#include "common/bit_field.h" #include "common/bit_field.h"
#include "common/common_types.h" #include "common/common_types.h"
@ -34,4 +37,17 @@ union CommandHeader {
BitField<31, 1, u32> group_commands; BitField<31, 1, u32> group_commands;
}; };
static std::map<CommandId, const char*> command_names = {
{CommandId::ViewportSizeX, "ViewportSizeX" },
{CommandId::ViewportInvSizeX, "ViewportInvSizeX" },
{CommandId::ViewportSizeY, "ViewportSizeY" },
{CommandId::ViewportInvSizeY, "ViewportInvSizeY" },
{CommandId::ViewportCorner, "ViewportCorner" },
{CommandId::DepthBufferFormat, "DepthBufferFormat" },
{CommandId::ColorBufferFormat, "ColorBufferFormat" },
{CommandId::DepthBufferAddress, "DepthBufferAddress" },
{CommandId::ColorBufferAddress, "ColorBufferAddress" },
{CommandId::ColorBufferSize, "ColorBufferSize" },
};
} }