diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 5ccafe5eef..dee0cf0617 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -276,15 +276,6 @@ void GLGSRender::on_init_thread() m_vao.element_array_buffer = *m_index_ring_buffer; - if (g_cfg.video.overlay) - { - if (gl_caps.ARB_shader_draw_parameters_supported) - { - m_text_printer.init(); - m_text_printer.set_enabled(true); - } - } - int image_unit = 0; for (auto &sampler : m_fs_sampler_states) { diff --git a/rpcs3/Emu/RSX/GL/GLPresent.cpp b/rpcs3/Emu/RSX/GL/GLPresent.cpp index 1e1cbe12c1..e2c7f4036c 100644 --- a/rpcs3/Emu/RSX/GL/GLPresent.cpp +++ b/rpcs3/Emu/RSX/GL/GLPresent.cpp @@ -290,8 +290,14 @@ void GLGSRender::flip(const rsx::display_flip_info_t& info) } } - if (g_cfg.video.overlay) + if (g_cfg.video.overlay && gl::get_driver_caps().ARB_shader_draw_parameters_supported) { + if (!m_text_printer.is_enabled()) + { + m_text_printer.init(); + m_text_printer.set_enabled(true); + } + // Disable depth test gl_state.depth_func(GL_ALWAYS); diff --git a/rpcs3/Emu/RSX/GL/GLTextOut.h b/rpcs3/Emu/RSX/GL/GLTextOut.h index d98cbe3e2e..362a582370 100644 --- a/rpcs3/Emu/RSX/GL/GLTextOut.h +++ b/rpcs3/Emu/RSX/GL/GLTextOut.h @@ -118,6 +118,11 @@ namespace gl enabled = state; } + bool is_enabled() + { + return enabled; + } + void print_text(int x, int y, int target_w, int target_h, const std::string &text, color4f color = { 0.3f, 1.f, 0.3f, 1.f }) { if (!enabled) return; diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 35b0d0c60f..9cf8161011 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -478,7 +478,6 @@ namespace rsx on_init_thread(); method_registers.init(); - m_profiler.enabled = !!g_cfg.video.overlay; if (!zcull_ctrl) { @@ -2843,6 +2842,7 @@ namespace rsx // Reset current stats m_frame_stats = {}; + m_profiler.enabled = !!g_cfg.video.overlay; } void thread::request_emu_flip(u32 buffer) diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index f4b7a44a35..286efb324a 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -477,13 +477,6 @@ VKGSRender::VKGSRender() : GSRender() vk::initialize_compiler_context(); vk::initialize_pipe_compiler(g_cfg.video.shader_compiler_threads_count); - if (g_cfg.video.overlay) - { - auto key = vk::get_renderpass_key(m_swapchain->get_surface_format()); - m_text_writer = std::make_unique(); - m_text_writer->init(*m_device, vk::get_renderpass(*m_device, key)); - } - m_prog_buffer = std::make_unique ( [this](const vk::pipeline_props& props, const RSXVertexProgram& vp, const RSXFragmentProgram& fp) diff --git a/rpcs3/Emu/RSX/VK/VKPresent.cpp b/rpcs3/Emu/RSX/VK/VKPresent.cpp index a6dbc4f494..c9bc1d64d7 100644 --- a/rpcs3/Emu/RSX/VK/VKPresent.cpp +++ b/rpcs3/Emu/RSX/VK/VKPresent.cpp @@ -190,7 +190,7 @@ void VKGSRender::frame_context_cleanup(vk::frame_context_t *ctx, bool free_resou if (free_resources) { - if (g_cfg.video.overlay) + if (m_text_writer) { m_text_writer->reset_descriptors(); } @@ -730,6 +730,13 @@ void VKGSRender::flip(const rsx::display_flip_info_t& info) if (g_cfg.video.overlay) { + if (!m_text_writer) + { + auto key = vk::get_renderpass_key(m_swapchain->get_surface_format()); + m_text_writer = std::make_unique(); + m_text_writer->init(*m_device, vk::get_renderpass(*m_device, key)); + } + m_text_writer->print_text(*m_current_command_buffer, *direct_fbo, 0, 0, direct_fbo->width(), direct_fbo->height(), fmt::format("RSX Load: %3d%%", get_load())); m_text_writer->print_text(*m_current_command_buffer, *direct_fbo, 0, 18, direct_fbo->width(), direct_fbo->height(), fmt::format("draw calls: %17d", info.stats.draw_calls)); m_text_writer->print_text(*m_current_command_buffer, *direct_fbo, 0, 36, direct_fbo->width(), direct_fbo->height(), fmt::format("draw call setup: %12dus", info.stats.setup_time)); diff --git a/rpcs3/Emu/system_config.h b/rpcs3/Emu/system_config.h index ebaa48d60b..a95e2a6d33 100644 --- a/rpcs3/Emu/system_config.h +++ b/rpcs3/Emu/system_config.h @@ -126,7 +126,7 @@ struct cfg_root : cfg::node cfg::_bool log_programs{ this, "Log shader programs" }; cfg::_bool vsync{ this, "VSync" }; cfg::_bool debug_output{ this, "Debug output" }; - cfg::_bool overlay{ this, "Debug overlay" }; + cfg::_bool overlay{ this, "Debug overlay", false, true }; cfg::_bool gl_legacy_buffers{ this, "Use Legacy OpenGL Buffers" }; cfg::_bool use_gpu_texture_scaling{ this, "Use GPU texture scaling", false }; cfg::_bool stretch_to_display_area{ this, "Stretch To Display Area", false, true };