rsx: Promote FIFO optimizations outside of strict mode

- The benefits of FIFO optimizations are huge in some cases.
  The optimizations also do not break any tested applications so no need to disable with strict mode
- A debug option is provided to disable this behaviour for testing
This commit is contained in:
kd-11 2018-05-26 13:37:52 +03:00 committed by kd-11
parent be13a776f4
commit 83f9be2524
8 changed files with 25 additions and 11 deletions

View file

@ -31,7 +31,7 @@ GLGSRender::GLGSRender() : GSRender()
else
m_vertex_cache.reset(new gl::weak_vertex_cache());
supports_multidraw = !g_cfg.video.strict_rendering_mode;
supports_multidraw = true;
supports_native_ui = (bool)g_cfg.misc.use_native_interface;
}

View file

@ -717,7 +717,7 @@ namespace rsx
bool execute_method_call = true;
//TODO: Flatten draw calls when multidraw is not supported to simplify checking in the end() methods
if (supports_multidraw)
if (supports_multidraw && !g_cfg.video.disable_FIFO_reordering)
{
//TODO: Make this cleaner
bool flush_commands_flag = has_deferred_call;

View file

@ -672,7 +672,7 @@ VKGSRender::VKGSRender() : GSRender()
m_ui_renderer.reset(new vk::ui_overlay_renderer());
m_ui_renderer->create(*m_current_command_buffer, m_texture_upload_buffer_ring_info);
supports_multidraw = !g_cfg.video.strict_rendering_mode;
supports_multidraw = true;
supports_native_ui = (bool)g_cfg.misc.use_native_interface;
}

View file

@ -362,6 +362,7 @@ struct cfg_root : cfg::node
cfg::_bool strict_rendering_mode{this, "Strict Rendering Mode"};
cfg::_bool disable_zcull_queries{this, "Disable ZCull Occlusion Queries", false};
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};
cfg::_bool force_cpu_blit_processing{this, "Force CPU Blit", false}; // Debugging option
cfg::_bool disable_on_disk_shader_cache{this, "Disable On-Disk Shader Cache", false};

View file

@ -48,7 +48,8 @@
"disableOcclusionQueries": "Disables running occlusion queries. Minor to moderate performance boost.\nMight introduce issues with broken occlusion e.g missing geometry and extreme pop-in.",
"forceCpuBlitEmulation": "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.",
"disableOnDiskShaderCache": "Disables the loading and saving of shaders from and to the shader cache in the data directory.",
"disableVulkanMemAllocator": "Disables the custom Vulkan memory allocator and reverts to direct calls to VkAllocateMemory/VkFreeMemory."
"disableVulkanMemAllocator": "Disables the custom Vulkan memory allocator and reverts to direct calls to VkAllocateMemory/VkFreeMemory.",
"disableFIFOReordering": "Disables RSX FIFO optimizations completely. Draws are processed as they are received by the DMA puller."
},
"emulator": {
"gui": {

View file

@ -60,6 +60,7 @@ public:
StrictRenderingMode,
DisableVertexCache,
DisableOcclusionQueries,
DisableFIFOReordering,
AnisotropicFilterOverride,
ResolutionScale,
MinimumScalableDimension,
@ -219,6 +220,7 @@ private:
{ StrictRenderingMode, { "Video", "Strict Rendering Mode"}},
{ DisableVertexCache, { "Video", "Disable Vertex Cache"}},
{ DisableOcclusionQueries, { "Video", "Disable ZCull Occlusion Queries" }},
{ DisableFIFOReordering, { "Video", "Disable FIFO Reordering" }},
{ ForceCPUBlitEmulation, { "Video", "Force CPU Blit" }},
{ DisableOnDiskShaderCache, { "Video", "Disable On-Disk Shader Cache"}},
{ DisableVulkanMemAllocator, { "Video", "Disable Vulkan Memory Allocator" }},

View file

@ -967,6 +967,9 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
xemu_settings->EnhanceCheckBox(ui->disableVulkanMemAllocator, emu_settings::DisableVulkanMemAllocator);
SubscribeTooltip(ui->disableVulkanMemAllocator, json_debug["disableVulkanMemAllocator"].toString());
xemu_settings->EnhanceCheckBox(ui->disableFIFOReordering, emu_settings::DisableFIFOReordering);
SubscribeTooltip(ui->disableFIFOReordering, json_debug["disableFIFOReordering"].toString());
// Checkboxes: core debug options
xemu_settings->EnhanceCheckBox(ui->ppuDebug, emu_settings::PPUDebug);
SubscribeTooltip(ui->ppuDebug, json_debug["ppuDebug"].toString());

View file

@ -36,7 +36,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
<number>7</number>
</property>
<widget class="QWidget" name="coreTab">
<attribute name="title">
@ -1700,12 +1700,19 @@
</widget>
</item>
<item>
<widget class="QCheckBox" name="disableVulkanMemAllocator">
<property name="text">
<string>Disable Vulkan Memory Allocator</string>
</property>
</widget>
</item>
<widget class="QCheckBox" name="disableVulkanMemAllocator">
<property name="text">
<string>Disable Vulkan Memory Allocator</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="disableFIFOReordering">
<property name="text">
<string>Disable FIFO Reordering</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>