vk_device: Enable VK_EXT_extended_dynamic_state when available
This commit is contained in:
		
							
								
								
									
										2
									
								
								externals/Vulkan-Headers
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								externals/Vulkan-Headers
									
									
									
									
										vendored
									
									
								
							 Submodule externals/Vulkan-Headers updated: 9250d5ae8f...8188e3fbbc
									
								
							| @@ -313,6 +313,16 @@ bool VKDevice::Create() { | |||||||
|         LOG_INFO(Render_Vulkan, "Device doesn't support custom border colors"); |         LOG_INFO(Render_Vulkan, "Device doesn't support custom border colors"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT dynamic_state; | ||||||
|  |     if (ext_extended_dynamic_state) { | ||||||
|  |         dynamic_state.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT; | ||||||
|  |         dynamic_state.pNext = nullptr; | ||||||
|  |         dynamic_state.extendedDynamicState = VK_TRUE; | ||||||
|  |         SetNext(next, dynamic_state); | ||||||
|  |     } else { | ||||||
|  |         LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (!ext_depth_range_unrestricted) { |     if (!ext_depth_range_unrestricted) { | ||||||
|         LOG_INFO(Render_Vulkan, "Device doesn't support depth range unrestricted"); |         LOG_INFO(Render_Vulkan, "Device doesn't support depth range unrestricted"); | ||||||
|     } |     } | ||||||
| @@ -541,6 +551,7 @@ std::vector<const char*> VKDevice::LoadExtensions() { | |||||||
|     bool has_ext_subgroup_size_control{}; |     bool has_ext_subgroup_size_control{}; | ||||||
|     bool has_ext_transform_feedback{}; |     bool has_ext_transform_feedback{}; | ||||||
|     bool has_ext_custom_border_color{}; |     bool has_ext_custom_border_color{}; | ||||||
|  |     bool has_ext_extended_dynamic_state{}; | ||||||
|     for (const auto& extension : physical.EnumerateDeviceExtensionProperties()) { |     for (const auto& extension : physical.EnumerateDeviceExtensionProperties()) { | ||||||
|         Test(extension, nv_viewport_swizzle, VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME, true); |         Test(extension, nv_viewport_swizzle, VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME, true); | ||||||
|         Test(extension, khr_uniform_buffer_standard_layout, |         Test(extension, khr_uniform_buffer_standard_layout, | ||||||
| @@ -558,6 +569,8 @@ std::vector<const char*> VKDevice::LoadExtensions() { | |||||||
|              false); |              false); | ||||||
|         Test(extension, has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, |         Test(extension, has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, | ||||||
|              false); |              false); | ||||||
|  |         Test(extension, has_ext_extended_dynamic_state, | ||||||
|  |              VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); | ||||||
|         if (Settings::values.renderer_debug) { |         if (Settings::values.renderer_debug) { | ||||||
|             Test(extension, nv_device_diagnostics_config, |             Test(extension, nv_device_diagnostics_config, | ||||||
|                  VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME, true); |                  VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME, true); | ||||||
| @@ -643,6 +656,19 @@ std::vector<const char*> VKDevice::LoadExtensions() { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if (has_ext_extended_dynamic_state) { | ||||||
|  |         VkPhysicalDeviceExtendedDynamicStateFeaturesEXT dynamic_state; | ||||||
|  |         dynamic_state.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT; | ||||||
|  |         dynamic_state.pNext = nullptr; | ||||||
|  |         features.pNext = &dynamic_state; | ||||||
|  |         physical.GetFeatures2KHR(features); | ||||||
|  |  | ||||||
|  |         if (dynamic_state.extendedDynamicState) { | ||||||
|  |             extensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); | ||||||
|  |             ext_extended_dynamic_state = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return extensions; |     return extensions; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -182,6 +182,11 @@ public: | |||||||
|         return ext_custom_border_color; |         return ext_custom_border_color; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Returns true if the device supports VK_EXT_extended_dynamic_state. | ||||||
|  |     bool IsExtExtendedDynamicStateSupported() const { | ||||||
|  |         return ext_extended_dynamic_state; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Returns the vendor name reported from Vulkan. |     /// Returns the vendor name reported from Vulkan. | ||||||
|     std::string_view GetVendorName() const { |     std::string_view GetVendorName() const { | ||||||
|         return vendor_name; |         return vendor_name; | ||||||
| @@ -239,6 +244,7 @@ private: | |||||||
|     bool ext_shader_viewport_index_layer{};    ///< Support for VK_EXT_shader_viewport_index_layer. |     bool ext_shader_viewport_index_layer{};    ///< Support for VK_EXT_shader_viewport_index_layer. | ||||||
|     bool ext_transform_feedback{};             ///< Support for VK_EXT_transform_feedback. |     bool ext_transform_feedback{};             ///< Support for VK_EXT_transform_feedback. | ||||||
|     bool ext_custom_border_color{};            ///< Support for VK_EXT_custom_border_color. |     bool ext_custom_border_color{};            ///< Support for VK_EXT_custom_border_color. | ||||||
|  |     bool ext_extended_dynamic_state{};         ///< Support for VK_EXT_extended_dynamic_state. | ||||||
|     bool nv_device_diagnostics_config{};       ///< Support for VK_NV_device_diagnostics_config. |     bool nv_device_diagnostics_config{};       ///< Support for VK_NV_device_diagnostics_config. | ||||||
|  |  | ||||||
|     // Telemetry parameters |     // Telemetry parameters | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user