mirror of
https://github.com/sal063/AC6_recomp
synced 2026-06-02 18:19:09 -04:00
98 lines
5.0 KiB
C++
98 lines
5.0 KiB
C++
#include "ac6_native_graphics_overlay.h"
|
|
|
|
#include <imgui.h>
|
|
|
|
#include "ac6_native_graphics.h"
|
|
|
|
namespace ac6::graphics {
|
|
|
|
NativeGraphicsStatusDialog::NativeGraphicsStatusDialog(rex::ui::ImGuiDrawer* imgui_drawer)
|
|
: ImGuiDialog(imgui_drawer) {}
|
|
|
|
NativeGraphicsStatusDialog::~NativeGraphicsStatusDialog() = default;
|
|
|
|
void NativeGraphicsStatusDialog::OnDraw(ImGuiIO& io) {
|
|
(void)io;
|
|
if (!visible_) {
|
|
return;
|
|
}
|
|
|
|
if (!ImGui::Begin("AC6 Native Graphics##status", &visible_, ImGuiWindowFlags_NoCollapse)) {
|
|
ImGui::End();
|
|
return;
|
|
}
|
|
|
|
const NativeGraphicsRuntimeStatus status = GetRuntimeStatus();
|
|
ImGui::Text("enabled: %s", status.enabled ? "true" : "false");
|
|
ImGui::Text("initialized: %s", status.initialized ? "true" : "false");
|
|
ImGui::Text("init failures seen: %s", status.had_init_failure ? "true" : "false");
|
|
ImGui::Text("init attempts/successes: %llu / %llu",
|
|
static_cast<unsigned long long>(status.init_attempts),
|
|
static_cast<unsigned long long>(status.init_successes));
|
|
ImGui::Text("frames built: %llu", static_cast<unsigned long long>(status.frames_built));
|
|
ImGui::Separator();
|
|
ImGui::Text("backend: %s", ac6::renderer::ToString(status.active_backend).data());
|
|
ImGui::Text("feature level: %s", ac6::renderer::ToString(status.feature_level).data());
|
|
ImGui::Text("renderer frames: %llu",
|
|
static_cast<unsigned long long>(status.renderer_stats.frame_count));
|
|
ImGui::Text("render passes built: %llu",
|
|
static_cast<unsigned long long>(status.renderer_stats.built_pass_count));
|
|
ImGui::Text("frontend passes/commands: %u / %u", status.frontend_summary.pass_count,
|
|
status.frontend_summary.total_command_count);
|
|
ImGui::Text("replay passes/commands: %u / %u", status.replay_summary.pass_count,
|
|
status.replay_summary.command_count);
|
|
ImGui::Text("execution passes/commands: %u / %u",
|
|
status.execution_summary.pass_count, status.execution_summary.command_count);
|
|
ImGui::Text("executor passes/commands: %u / %u",
|
|
status.executor_summary.pass_count, status.executor_summary.command_count);
|
|
ImGui::Separator();
|
|
ImGui::Text("capture frame: %llu",
|
|
static_cast<unsigned long long>(status.capture_summary.frame_index));
|
|
ImGui::Text("capture draws/clears/resolves: %u / %u / %u",
|
|
status.capture_summary.draw_count, status.capture_summary.clear_count,
|
|
status.capture_summary.resolve_count);
|
|
ImGui::Separator();
|
|
ImGui::TextUnformatted("guest draw counts (this frame, pre-reset):");
|
|
ImGui::Text(" indexed / shared / primitive: %u / %u / %u",
|
|
status.capture_summary.frame_stats.draw_calls_indexed,
|
|
status.capture_summary.frame_stats.draw_calls_indexed_shared,
|
|
status.capture_summary.frame_stats.draw_calls_primitive);
|
|
ImGui::Text(" set_sampler / set_texture_fetch: %u / %u",
|
|
status.capture_summary.frame_stats.set_sampler_state_calls,
|
|
status.capture_summary.frame_stats.set_texture_fetch_calls);
|
|
ImGui::TextUnformatted("primitive topology (D3D9 type, all draws):");
|
|
ImGui::Text(" point %u line %u strip %u tri %u triStrip %u fan %u other %u",
|
|
status.capture_summary.topology_pointlist, status.capture_summary.topology_linelist,
|
|
status.capture_summary.topology_linestrip, status.capture_summary.topology_trianglelist,
|
|
status.capture_summary.topology_trianglestrip, status.capture_summary.topology_trianglefan,
|
|
status.capture_summary.topology_other);
|
|
ImGui::Text("last draw: prim_type=%u count=%u flags=0x%X",
|
|
status.capture_summary.last_draw_primitive_type, status.capture_summary.last_draw_count,
|
|
status.capture_summary.last_draw_flags);
|
|
ImGui::Separator();
|
|
ImGui::Text("planned output: %ux%u", status.frame_plan.output_width,
|
|
status.frame_plan.output_height);
|
|
ImGui::Text("replay output/present: %ux%u / %s", status.replay_summary.output_width,
|
|
status.replay_summary.output_height,
|
|
status.replay_summary.has_present_pass ? "yes" : "no");
|
|
ImGui::Text("execution output/present: %ux%u / %s",
|
|
status.execution_summary.output_width, status.execution_summary.output_height,
|
|
status.execution_summary.has_present_pass ? "yes" : "no");
|
|
ImGui::Text("executor output/present: %ux%u / %s",
|
|
status.executor_summary.output_width, status.executor_summary.output_height,
|
|
status.executor_summary.has_present_pass ? "yes" : "no");
|
|
ImGui::Text("executor graphics/present/resource: %u / %u / %u",
|
|
status.executor_summary.graphics_pass_count,
|
|
status.executor_summary.present_pass_count,
|
|
status.executor_summary.resource_translation_pass_count);
|
|
ImGui::Text("stages scene/post/ui: %s / %s / %s",
|
|
status.frame_plan.has_scene_stage ? "yes" : "no",
|
|
status.frame_plan.has_post_process_stage ? "yes" : "no",
|
|
status.frame_plan.has_ui_stage ? "yes" : "no");
|
|
|
|
ImGui::End();
|
|
}
|
|
|
|
} // namespace ac6::graphics
|
|
|