diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 674b162abe..c0e44dd6dc 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -3270,6 +3270,7 @@ namespace rsx current_display_buffer = buffer; m_queued_flip.emu_flip = true; m_queued_flip.in_progress = true; + m_queued_flip.skip_frame |= g_cfg.video.disable_video_output && !g_cfg.video.perf_overlay.perf_overlay_enabled; flip(m_queued_flip); diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 84d8818248..4f316c147d 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -640,6 +640,14 @@ namespace rsx } rsx::method_registers.current_draw_clause.compile(); + + if (g_cfg.video.disable_video_output) + { + rsxthr->execute_nop_draw(); + rsxthr->rsx::thread::end(); + return; + } + rsxthr->end(); } else diff --git a/rpcs3/Emu/system_config.h b/rpcs3/Emu/system_config.h index 14595f4454..2a172e5831 100644 --- a/rpcs3/Emu/system_config.h +++ b/rpcs3/Emu/system_config.h @@ -141,6 +141,7 @@ struct cfg_root : cfg::node cfg::_bool force_high_precision_z_buffer{ this, "Force High Precision Z buffer" }; cfg::_bool strict_rendering_mode{ this, "Strict Rendering Mode" }; cfg::_bool disable_zcull_queries{ this, "Disable ZCull Occlusion Queries", false, true }; + cfg::_bool disable_video_output{ this, "Disable Video Output", false, true }; cfg::_bool disable_vertex_cache{ this, "Disable Vertex Cache", false }; cfg::_bool disable_FIFO_reordering{ this, "Disable FIFO Reordering", false }; cfg::_bool frame_skip_enabled{ this, "Enable Frame Skip", false, true }; diff --git a/rpcs3/rpcs3qt/emu_settings_type.h b/rpcs3/rpcs3qt/emu_settings_type.h index acd445fb69..06be279ae0 100644 --- a/rpcs3/rpcs3qt/emu_settings_type.h +++ b/rpcs3/rpcs3qt/emu_settings_type.h @@ -70,6 +70,7 @@ enum class emu_settings_type StrictRenderingMode, DisableVertexCache, DisableOcclusionQueries, + DisableVideoOutput, DisableFIFOReordering, StrictTextureFlushing, DisableNativefloat16, @@ -239,6 +240,7 @@ inline static const QMap settings_location = { emu_settings_type::StrictRenderingMode, { "Video", "Strict Rendering Mode"}}, { emu_settings_type::DisableVertexCache, { "Video", "Disable Vertex Cache"}}, { emu_settings_type::DisableOcclusionQueries, { "Video", "Disable ZCull Occlusion Queries"}}, + { emu_settings_type::DisableVideoOutput, { "Video", "Disable Video Output"}}, { emu_settings_type::DisableFIFOReordering, { "Video", "Disable FIFO Reordering"}}, { emu_settings_type::DisableNativefloat16, { "Video", "Disable native float16 support"}}, { emu_settings_type::Enable3D, { "Video", "Enable 3D"}}, diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 22f7d118bf..9585b31661 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -2049,6 +2049,9 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std m_emu_settings->EnhanceCheckBox(ui->disableHwOcclusionQueries, emu_settings_type::DisableOcclusionQueries); SubscribeTooltip(ui->disableHwOcclusionQueries, tooltips.settings.disable_occlusion_queries); + m_emu_settings->EnhanceCheckBox(ui->disableVideoOutput, emu_settings_type::DisableVideoOutput); + SubscribeTooltip(ui->disableVideoOutput, tooltips.settings.disable_video_output); + m_emu_settings->EnhanceCheckBox(ui->forceCpuBlitEmulation, emu_settings_type::ForceCPUBlitEmulation); SubscribeTooltip(ui->forceCpuBlitEmulation, tooltips.settings.force_cpu_blit_emulation); diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index fb362729a2..ff40ba7062 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -3855,6 +3855,13 @@ + + + + Disable Video Output + + + diff --git a/rpcs3/rpcs3qt/tooltips.h b/rpcs3/rpcs3qt/tooltips.h index 6ff0e43b9d..df5b9d6198 100644 --- a/rpcs3/rpcs3qt/tooltips.h +++ b/rpcs3/rpcs3qt/tooltips.h @@ -103,6 +103,7 @@ public: const QString debug_overlay = tr("Provides a graphical overlay of various debugging information.\nIf unsure, don't use this option."); const QString log_shader_programs = tr("Dump game shaders to file. Only useful to developers.\nIf unsure, don't use this option."); const QString disable_occlusion_queries = tr("Disables running occlusion queries. Minor to moderate performance boost.\nMight introduce issues with broken occlusion e.g missing geometry and extreme pop-in."); + const QString disable_video_output = tr("Disables all video output and PS3 graphical rendering.\nIts only use case is to evaluate performance on CELL for development."); const QString force_cpu_blit_emulation = tr("Forces emulation of all blit and image manipulation operations on the CPU.\nRequires 'Write Color Buffers' option to also be enabled in most cases to avoid missing graphics.\nSignificantly degrades performance but is more accurate in some cases.\nThis setting overrides the 'GPU texture scaling' option."); const QString disable_vulkan_mem_allocator = tr("Disables the custom Vulkan memory allocator and reverts to direct calls to VkAllocateMemory/VkFreeMemory."); const QString disable_fifo_reordering = tr("Disables RSX FIFO optimizations completely. Draws are processed as they are received by the DMA puller.");