summaryrefslogtreecommitdiff
path: root/src/citra_qt/debugger/graphics_vertex_shader.cpp
diff options
context:
space:
mode:
authorGravatar Tony Wasserka2015-05-27 16:20:46 +0200
committerGravatar Tony Wasserka2015-08-16 13:22:00 +0200
commit4cb302c8aeb86bdb7c7bd6f9e5d716e140868075 (patch)
tree3aebbc2a55c68a48cbf72bcf7652485c1ac9b745 /src/citra_qt/debugger/graphics_vertex_shader.cpp
parentcitra-qt: Print the correct swizzle mask for SRC2 in the shader disassembler. (diff)
downloadyuzu-4cb302c8aeb86bdb7c7bd6f9e5d716e140868075.tar.gz
yuzu-4cb302c8aeb86bdb7c7bd6f9e5d716e140868075.tar.xz
yuzu-4cb302c8aeb86bdb7c7bd6f9e5d716e140868075.zip
citra-qt: Improve shader debugger.
Now supports dumping the current shader and recognizes a larger number of output semantics.
Diffstat (limited to 'src/citra_qt/debugger/graphics_vertex_shader.cpp')
-rw-r--r--src/citra_qt/debugger/graphics_vertex_shader.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/citra_qt/debugger/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics_vertex_shader.cpp
index b7882741d..92d3a8323 100644
--- a/src/citra_qt/debugger/graphics_vertex_shader.cpp
+++ b/src/citra_qt/debugger/graphics_vertex_shader.cpp
@@ -6,6 +6,8 @@
6#include <sstream> 6#include <sstream>
7 7
8#include <QBoxLayout> 8#include <QBoxLayout>
9#include <QLabel>
10#include <QPushButton>
9#include <QTreeView> 11#include <QTreeView>
10 12
11#include "video_core/shader/shader_interpreter.h" 13#include "video_core/shader/shader_interpreter.h"
@@ -253,18 +255,27 @@ void GraphicsVertexShaderModel::OnUpdate()
253 255
254 info.Clear(); 256 info.Clear();
255 257
256 for (auto instr : Pica::g_state.vs.program_code) 258 auto& shader_setup = Pica::g_state.vs;
259 for (auto instr : shader_setup.program_code)
257 info.code.push_back({instr}); 260 info.code.push_back({instr});
258 261
259 for (auto pattern : Pica::g_state.vs.swizzle_data) 262 for (auto pattern : shader_setup.swizzle_data)
260 info.swizzle_info.push_back({pattern}); 263 info.swizzle_info.push_back({pattern});
261 264
262 info.labels.insert({ Pica::g_state.regs.vs.main_offset, "main" }); 265 u32 entry_point = Pica::g_state.regs.vs.main_offset;
266 info.labels.insert({ entry_point, "main" });
263 267
264 endResetModel(); 268 endResetModel();
265} 269}
266 270
271void GraphicsVertexShaderModel::DumpShader() {
272 auto& setup = Pica::g_state.vs;
273 auto& config = Pica::g_state.regs.vs;
267 274
275 Pica::DebugUtils::DumpShader(setup.program_code.data(), setup.program_code.size(),
276 setup.swizzle_data.data(), setup.swizzle_data.size(),
277 config.main_offset, Pica::g_state.regs.vs_output_attributes);
278}
268GraphicsVertexShaderWidget::GraphicsVertexShaderWidget(std::shared_ptr< Pica::DebugContext > debug_context, 279GraphicsVertexShaderWidget::GraphicsVertexShaderWidget(std::shared_ptr< Pica::DebugContext > debug_context,
269 QWidget* parent) 280 QWidget* parent)
270 : BreakPointObserverDock(debug_context, "Pica Vertex Shader", parent) { 281 : BreakPointObserverDock(debug_context, "Pica Vertex Shader", parent) {
@@ -276,6 +287,9 @@ GraphicsVertexShaderWidget::GraphicsVertexShaderWidget(std::shared_ptr< Pica::De
276 binary_list->setRootIsDecorated(false); 287 binary_list->setRootIsDecorated(false);
277 binary_list->setAlternatingRowColors(true); 288 binary_list->setAlternatingRowColors(true);
278 289
290 auto dump_shader = new QPushButton(tr("Dump"));
291
292 connect(dump_shader, SIGNAL(clicked()), binary_model, SLOT(DumpShader()));
279 connect(this, SIGNAL(Update()), binary_model, SLOT(OnUpdate())); 293 connect(this, SIGNAL(Update()), binary_model, SLOT(OnUpdate()));
280 294
281 auto main_widget = new QWidget; 295 auto main_widget = new QWidget;
@@ -285,6 +299,7 @@ GraphicsVertexShaderWidget::GraphicsVertexShaderWidget(std::shared_ptr< Pica::De
285 sub_layout->addWidget(binary_list); 299 sub_layout->addWidget(binary_list);
286 main_layout->addLayout(sub_layout); 300 main_layout->addLayout(sub_layout);
287 } 301 }
302 main_layout->addWidget(dump_shader);
288 main_widget->setLayout(main_layout); 303 main_widget->setLayout(main_layout);
289 setWidget(main_widget); 304 setWidget(main_widget);
290} 305}