Просмотр исходного кода

Further refine GPU command list debugging.

Tony Wasserka 12 лет назад
Родитель
Сommit
f82410e633
3 измененных файлов с 27 добавлено и 4 удалено
  1. 10 4
      src/citra_qt/debugger/graphics_cmdlists.cpp
  2. 1 0
      src/video_core/gpu_debugger.h
  3. 16 0
      src/video_core/pica.h

+ 10 - 4
src/citra_qt/debugger/graphics_cmdlists.cpp

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

+ 1 - 0
src/video_core/gpu_debugger.h

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

+ 16 - 0
src/video_core/pica.h

@@ -4,6 +4,9 @@
 
 #pragma once
 
+#include <initializer_list>
+#include <map>
+
 #include "common/bit_field.h"
 #include "common/common_types.h"
 
@@ -34,4 +37,17 @@ union CommandHeader {
     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" },
+};
+
 }