diff options
| author | 2020-06-21 17:20:30 -0300 | |
|---|---|---|
| committer | 2020-06-26 20:55:15 -0300 | |
| commit | 7527402a461b13b9c0c5c36d4b3036fd9532813c (patch) | |
| tree | 55e4aff4d3079dd24fade75d51a5dc643d9fef5c | |
| parent | Merge pull request #4144 from FernandoS27/tt-fix (diff) | |
| download | yuzu-7527402a461b13b9c0c5c36d4b3036fd9532813c.tar.gz yuzu-7527402a461b13b9c0c5c36d4b3036fd9532813c.tar.xz yuzu-7527402a461b13b9c0c5c36d4b3036fd9532813c.zip | |
vk_device: Enable VK_EXT_extended_dynamic_state when available
| m--------- | externals/Vulkan-Headers | 0 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_device.cpp | 26 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_device.h | 6 |
3 files changed, 32 insertions, 0 deletions
diff --git a/externals/Vulkan-Headers b/externals/Vulkan-Headers | |||
| Subproject 9250d5ae8f50202005233dc0512a1d460c8b483 | Subproject 8188e3fbbc105591064093440f88081fb957d4f | ||
diff --git a/src/video_core/renderer_vulkan/vk_device.cpp b/src/video_core/renderer_vulkan/vk_device.cpp index 9fd8ac3f6..fdaea4210 100644 --- a/src/video_core/renderer_vulkan/vk_device.cpp +++ b/src/video_core/renderer_vulkan/vk_device.cpp | |||
| @@ -313,6 +313,16 @@ bool VKDevice::Create() { | |||
| 313 | LOG_INFO(Render_Vulkan, "Device doesn't support custom border colors"); | 313 | LOG_INFO(Render_Vulkan, "Device doesn't support custom border colors"); |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | VkPhysicalDeviceExtendedDynamicStateFeaturesEXT dynamic_state; | ||
| 317 | if (ext_extended_dynamic_state) { | ||
| 318 | dynamic_state.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT; | ||
| 319 | dynamic_state.pNext = nullptr; | ||
| 320 | dynamic_state.extendedDynamicState = VK_TRUE; | ||
| 321 | SetNext(next, dynamic_state); | ||
| 322 | } else { | ||
| 323 | LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state"); | ||
| 324 | } | ||
| 325 | |||
| 316 | if (!ext_depth_range_unrestricted) { | 326 | if (!ext_depth_range_unrestricted) { |
| 317 | LOG_INFO(Render_Vulkan, "Device doesn't support depth range unrestricted"); | 327 | LOG_INFO(Render_Vulkan, "Device doesn't support depth range unrestricted"); |
| 318 | } | 328 | } |
| @@ -541,6 +551,7 @@ std::vector<const char*> VKDevice::LoadExtensions() { | |||
| 541 | bool has_ext_subgroup_size_control{}; | 551 | bool has_ext_subgroup_size_control{}; |
| 542 | bool has_ext_transform_feedback{}; | 552 | bool has_ext_transform_feedback{}; |
| 543 | bool has_ext_custom_border_color{}; | 553 | bool has_ext_custom_border_color{}; |
| 554 | bool has_ext_extended_dynamic_state{}; | ||
| 544 | for (const auto& extension : physical.EnumerateDeviceExtensionProperties()) { | 555 | for (const auto& extension : physical.EnumerateDeviceExtensionProperties()) { |
| 545 | Test(extension, nv_viewport_swizzle, VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME, true); | 556 | Test(extension, nv_viewport_swizzle, VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME, true); |
| 546 | Test(extension, khr_uniform_buffer_standard_layout, | 557 | Test(extension, khr_uniform_buffer_standard_layout, |
| @@ -558,6 +569,8 @@ std::vector<const char*> VKDevice::LoadExtensions() { | |||
| 558 | false); | 569 | false); |
| 559 | Test(extension, has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, | 570 | Test(extension, has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, |
| 560 | false); | 571 | false); |
| 572 | Test(extension, has_ext_extended_dynamic_state, | ||
| 573 | VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); | ||
| 561 | if (Settings::values.renderer_debug) { | 574 | if (Settings::values.renderer_debug) { |
| 562 | Test(extension, nv_device_diagnostics_config, | 575 | Test(extension, nv_device_diagnostics_config, |
| 563 | VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME, true); | 576 | VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME, true); |
| @@ -643,6 +656,19 @@ std::vector<const char*> VKDevice::LoadExtensions() { | |||
| 643 | } | 656 | } |
| 644 | } | 657 | } |
| 645 | 658 | ||
| 659 | if (has_ext_extended_dynamic_state) { | ||
| 660 | VkPhysicalDeviceExtendedDynamicStateFeaturesEXT dynamic_state; | ||
| 661 | dynamic_state.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT; | ||
| 662 | dynamic_state.pNext = nullptr; | ||
| 663 | features.pNext = &dynamic_state; | ||
| 664 | physical.GetFeatures2KHR(features); | ||
| 665 | |||
| 666 | if (dynamic_state.extendedDynamicState) { | ||
| 667 | extensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); | ||
| 668 | ext_extended_dynamic_state = true; | ||
| 669 | } | ||
| 670 | } | ||
| 671 | |||
| 646 | return extensions; | 672 | return extensions; |
| 647 | } | 673 | } |
| 648 | 674 | ||
diff --git a/src/video_core/renderer_vulkan/vk_device.h b/src/video_core/renderer_vulkan/vk_device.h index 6b9227b09..ae5c21baa 100644 --- a/src/video_core/renderer_vulkan/vk_device.h +++ b/src/video_core/renderer_vulkan/vk_device.h | |||
| @@ -182,6 +182,11 @@ public: | |||
| 182 | return ext_custom_border_color; | 182 | return ext_custom_border_color; |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | /// Returns true if the device supports VK_EXT_extended_dynamic_state. | ||
| 186 | bool IsExtExtendedDynamicStateSupported() const { | ||
| 187 | return ext_extended_dynamic_state; | ||
| 188 | } | ||
| 189 | |||
| 185 | /// Returns the vendor name reported from Vulkan. | 190 | /// Returns the vendor name reported from Vulkan. |
| 186 | std::string_view GetVendorName() const { | 191 | std::string_view GetVendorName() const { |
| 187 | return vendor_name; | 192 | return vendor_name; |
| @@ -239,6 +244,7 @@ private: | |||
| 239 | bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer. | 244 | bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer. |
| 240 | bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback. | 245 | bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback. |
| 241 | bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. | 246 | bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. |
| 247 | bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state. | ||
| 242 | bool nv_device_diagnostics_config{}; ///< Support for VK_NV_device_diagnostics_config. | 248 | bool nv_device_diagnostics_config{}; ///< Support for VK_NV_device_diagnostics_config. |
| 243 | 249 | ||
| 244 | // Telemetry parameters | 250 | // Telemetry parameters |