diff --git a/main.cpp b/main.cpp index 8a6dfac..ac7e962 100644 --- a/main.cpp +++ b/main.cpp @@ -6,8 +6,30 @@ #include #include #include +//#include +#include -QList load_command_trace() + +namespace +{ +template +void fill_variant_vector(std::vector values, + const rsx::frame_capture_data::draw_state &draw_state, + QList &lst) +{ + return; + /* + std::vector readable_index(values.size()); + write_index_array_data_to_buffer(readable_index, values, + draw_state.state.index_type(), rsx::primitive_type::triangles, false, -1, {{0, values.size() / sizeof(T)}}, + [](auto) { return false; }); + gsl::span casted_readable_index = {reinterpret_cast(values.data()), gsl::narrow(values.size() / sizeof(T))}; + std::for_each(casted_readable_index.begin(), casted_readable_index.end(), + [&lst](auto v) {lst.append(QVariant::fromValue(v));});*/ +} +} + +std::tuple, QStringList> load_command_trace() { // Unfortunatly QTextStream isn't compatible with std::iostream std::fstream f("../bin/capture.txt", std::ios::in | std::ios::binary); @@ -24,28 +46,24 @@ QList load_command_trace() tmp->_name = QString::fromStdString(draw_state.name); tmp->_transform_program = QString::fromStdString(draw_state.programs.first); tmp->_shader_program = QString::fromStdString(draw_state.programs.second); - size_t index_list_size = draw_state.index.size(); + switch (draw_state.state.index_type()) { case rsx::index_array_type::u16: - for (size_t i = 0; i < index_list_size / 2; i++) - { - const u16* ptr = reinterpret_cast(draw_state.index.data()); - tmp->_index_list.append(QVariant::fromValue(ptr[i])); - } + fill_variant_vector(draw_state.index, draw_state, tmp->_index_list); break; case rsx::index_array_type::u32: - for (size_t i = 0; i < index_list_size / 4; i++) - { - const u32* ptr = reinterpret_cast(draw_state.index.data()); - tmp->_index_list.append(QVariant::fromValue(ptr[i])); - } + fill_variant_vector(draw_state.index, draw_state, tmp->_index_list); break; } + st.append(tmp); } - - return st; + QStringList commands; + std::transform(frame_debug.command_queue.begin(), frame_debug.command_queue.end(), + std::back_inserter(commands), + [](const std::pair pair){ return QString::fromStdString(rsx::get_pretty_printing_function(pair.first)(pair.second));}); + return std::make_tuple(st, commands); } int main(int argc, char *argv[]) @@ -54,8 +72,9 @@ int main(int argc, char *argv[]) QQmlApplicationEngine engine; QQmlContext* ctx = engine.rootContext(); - QList st = load_command_trace(); - ctx->setContextProperty("stateList", QVariant::fromValue(st)); + std::tuple, QStringList > st = load_command_trace(); + ctx->setContextProperty("commandList", std::get<1>(st)); + ctx->setContextProperty("stateList", QVariant::fromValue(std::get<0>(st))); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); diff --git a/main.qml b/main.qml index 4ffeab2..1f9281f 100644 --- a/main.qml +++ b/main.qml @@ -11,6 +11,30 @@ Window { SplitView { id: splitView1 anchors.fill: parent + + ScrollView + { + ListView { + width: 130 + anchors.fill: parent.fill + model: commandList + + delegate: Item { + x: 5 + width: 80 + height: 40 + + Row { + Text { + text: model.modelData + anchors.verticalCenter: parent.verticalCenter + } + spacing: 10 + } + } + } + } + ScrollView { ListView { diff --git a/rsx-debugger.pro b/rsx-debugger.pro index 7e5605f..8587144 100644 --- a/rsx-debugger.pro +++ b/rsx-debugger.pro @@ -5,14 +5,17 @@ CONFIG += c++11 SOURCES += main.cpp \ ../rpcs3/Emu/RSX/gcm_enums.cpp \ - ../Utilities/StrFmt.cpp + ../Utilities/StrFmt.cpp \ + ../rpcs3/Emu/RSX/Common/BufferUtils.cpp \ + ../rpcs3/Emu/RSX/gcm_printing.cpp RESOURCES += qml.qrc INCLUDEPATH += ../ \ ../rpcs3/ \ ../rsx_program_decompiler/rsx_decompiler/ \ - ../3rdparty/cereal/include/ + ../3rdparty/cereal/include/ \ + ../3rdparty/GSL/include/ # Additional import path used to resolve QML modules in Qt Creator's code model QML_IMPORT_PATH = diff --git a/state.h b/state.h index f48124c..2b37679 100644 --- a/state.h +++ b/state.h @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include