From 34ca8bd02140e6a343bd970f557633c557a164c6 Mon Sep 17 00:00:00 2001 From: MaranBr Date: Thu, 21 Aug 2025 09:23:07 -0400 Subject: [PATCH] Update Vulkan Extended Dynamic State settings --- src/common/settings.h | 4 ++++ .../renderer_vulkan/vk_pipeline_cache.cpp | 15 +++++-------- .../renderer_vulkan/vk_rasterizer.cpp | 15 +++++-------- .../vulkan_common/vulkan_device.cpp | 22 +++++-------------- .../configure_graphics_extensions.ui | 14 +----------- src/yuzu/configuration/shared_translation.cpp | 4 +--- 6 files changed, 22 insertions(+), 52 deletions(-) diff --git a/src/common/settings.h b/src/common/settings.h index 288a41b369..fd813293a2 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -518,7 +518,11 @@ struct Values { Category::RendererAdvanced}; SwitchableSetting dyna_state{linkage, +#ifdef ANDROID 0, +#else + 3, +#endif 0, 3, "dyna_state", diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index e3fd0b683c..e4b6527db0 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -409,16 +409,11 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, LOG_INFO(Render_Vulkan, "DynamicState value is set to {}", (u32) dynamic_state); dynamic_features = DynamicFeatures{ - .has_extended_dynamic_state = device.IsExtExtendedDynamicStateSupported() - && dynamic_state > 0, - .has_extended_dynamic_state_2 = device.IsExtExtendedDynamicState2Supported() - && dynamic_state > 1, - .has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported() - && dynamic_state > 1, - .has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() - && dynamic_state > 2, - .has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() - && dynamic_state > 2, + .has_extended_dynamic_state = device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0, + .has_extended_dynamic_state_2 = device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1, + .has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1, + .has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2, + .has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2, .has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported(), }; diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index c511a51720..9ce5ea60a4 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -939,16 +939,11 @@ void RasterizerVulkan::UpdateDynamicStates() { const u8 dynamic_state = Settings::values.dyna_state.GetValue(); auto features = DynamicFeatures{ - .has_extended_dynamic_state = - device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0, - .has_extended_dynamic_state_2 = - device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1, - .has_extended_dynamic_state_2_extra = - device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1, - .has_extended_dynamic_state_3_blend = - device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2, - .has_extended_dynamic_state_3_enables = - device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2, + .has_extended_dynamic_state = device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0, + .has_extended_dynamic_state_2 = device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1, + .has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1, + .has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2, + .has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2, .has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported(), }; diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index fc9e78a234..770c4ea288 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -727,20 +727,11 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR LOG_INFO(Render_Vulkan, "Dynamic state is disabled (dyna_state = 0), forcing scaled format emulation ON"); // Disable dynamic state 1-3 and all extensions - RemoveExtensionFeature(extensions.custom_border_color, features.custom_border_color, - VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME); - - RemoveExtensionFeature(extensions.extended_dynamic_state, features.extended_dynamic_state, - VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); - - RemoveExtensionFeature(extensions.extended_dynamic_state2, features.extended_dynamic_state2, - VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); - - RemoveExtensionFeature(extensions.vertex_input_dynamic_state, features.vertex_input_dynamic_state, - VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); - - RemoveExtensionFeature(extensions.extended_dynamic_state3, features.extended_dynamic_state3, - VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME); + RemoveExtensionFeature(extensions.custom_border_color, features.custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME); + RemoveExtensionFeature(extensions.extended_dynamic_state, features.extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); + RemoveExtensionFeature(extensions.extended_dynamic_state2, features.extended_dynamic_state2, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); + RemoveExtensionFeature(extensions.vertex_input_dynamic_state, features.vertex_input_dynamic_state, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); + RemoveExtensionFeature(extensions.extended_dynamic_state3, features.extended_dynamic_state3, VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME); dynamic_state3_blending = false; dynamic_state3_enables = false; @@ -750,8 +741,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR LOG_INFO(Render_Vulkan, "Dynamic state is enabled (dyna_state = 1-3), disabling scaled format emulation"); } - logical = vk::Device::Create(physical, queue_cis, ExtensionListForVulkan(loaded_extensions), - first_next, dld); + logical = vk::Device::Create(physical, queue_cis, ExtensionListForVulkan(loaded_extensions), first_next, dld); graphics_queue = logical.GetQueue(graphics_family); present_queue = logical.GetQueue(present_family); diff --git a/src/yuzu/configuration/configure_graphics_extensions.ui b/src/yuzu/configuration/configure_graphics_extensions.ui index beae6df6b0..7906b8318d 100644 --- a/src/yuzu/configuration/configure_graphics_extensions.ui +++ b/src/yuzu/configuration/configure_graphics_extensions.ui @@ -22,21 +22,9 @@ - Vulkan Extension Settings + Vulkan Extensions Settings - - - - While it's recommended to use state 3, some games may perform better on lower states. Setting to 0 (disabled) may also break games. -If your GPU is older (i.e. RX570/580 or older), it may not support these features. If this is the case, set the slider to 0 and uncheck all boxes. -These settings are experimental, and may cause black screens. If your games fail to boot or are stuck on a black screen, change these settings around. - - - true - - - diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp index fd541d4fd7..ec5908c243 100644 --- a/src/yuzu/configuration/shared_translation.cpp +++ b/src/yuzu/configuration/shared_translation.cpp @@ -346,9 +346,7 @@ std::unique_ptr InitializeTranslations(QWidget* parent) INSERT(Settings, dyna_state, tr("Extended Dynamic State"), - tr("Enables the VkExtendedDynamicState* extensions.\nHigher dynamic states will " - "generally improve " - "performance, but may cause issues on certain games or devices.")); + tr("Controls the number of extensions that can be used in Extended Dynamic State.\nHigher numbers allow for more extensions and can increase performance, but may cause issues with some drivers and vendors.\nThe default value is 3, but can be gradually decreased until stability is achieved.")); INSERT(Settings, provoking_vertex,