diff options
| author | 2022-12-17 16:08:10 -0500 | |
|---|---|---|
| committer | 2022-12-17 16:08:10 -0500 | |
| commit | 5da72a891fb4c4ddddbeefc0b235079fa3830743 (patch) | |
| tree | cd4006e1a4e50c298ebb3004341191203ac11c56 /src/video_core/vulkan_common | |
| parent | Merge pull request #9461 from liamwhite/wanative (diff) | |
| parent | Vulkan: Add support for VK_EXT_depth_clip_control. (diff) | |
| download | yuzu-5da72a891fb4c4ddddbeefc0b235079fa3830743.tar.gz yuzu-5da72a891fb4c4ddddbeefc0b235079fa3830743.tar.xz yuzu-5da72a891fb4c4ddddbeefc0b235079fa3830743.zip | |
Merge pull request #7450 from FernandoS27/ndc-vulkan
Vulkan: Add support for VK_EXT_depth_clip_control.
Diffstat (limited to 'src/video_core/vulkan_common')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 25 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.h | 6 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index f45030311..c4d31681a 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -660,6 +660,16 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 660 | LOG_INFO(Render_Vulkan, "Device doesn't support depth range unrestricted"); | 660 | LOG_INFO(Render_Vulkan, "Device doesn't support depth range unrestricted"); |
| 661 | } | 661 | } |
| 662 | 662 | ||
| 663 | VkPhysicalDeviceDepthClipControlFeaturesEXT depth_clip_control_features; | ||
| 664 | if (ext_depth_clip_control) { | ||
| 665 | depth_clip_control_features = { | ||
| 666 | .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, | ||
| 667 | .pNext = nullptr, | ||
| 668 | .depthClipControl = VK_TRUE, | ||
| 669 | }; | ||
| 670 | SetNext(next, depth_clip_control_features); | ||
| 671 | } | ||
| 672 | |||
| 663 | VkDeviceDiagnosticsConfigCreateInfoNV diagnostics_nv; | 673 | VkDeviceDiagnosticsConfigCreateInfoNV diagnostics_nv; |
| 664 | if (Settings::values.enable_nsight_aftermath && nv_device_diagnostics_config) { | 674 | if (Settings::values.enable_nsight_aftermath && nv_device_diagnostics_config) { |
| 665 | nsight_aftermath_tracker = std::make_unique<NsightAftermathTracker>(); | 675 | nsight_aftermath_tracker = std::make_unique<NsightAftermathTracker>(); |
| @@ -1084,6 +1094,7 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 1084 | bool has_ext_vertex_input_dynamic_state{}; | 1094 | bool has_ext_vertex_input_dynamic_state{}; |
| 1085 | bool has_ext_line_rasterization{}; | 1095 | bool has_ext_line_rasterization{}; |
| 1086 | bool has_ext_primitive_topology_list_restart{}; | 1096 | bool has_ext_primitive_topology_list_restart{}; |
| 1097 | bool has_ext_depth_clip_control{}; | ||
| 1087 | for (const std::string& extension : supported_extensions) { | 1098 | for (const std::string& extension : supported_extensions) { |
| 1088 | const auto test = [&](std::optional<std::reference_wrapper<bool>> status, const char* name, | 1099 | const auto test = [&](std::optional<std::reference_wrapper<bool>> status, const char* name, |
| 1089 | bool push) { | 1100 | bool push) { |
| @@ -1117,6 +1128,7 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 1117 | test(ext_shader_stencil_export, VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, true); | 1128 | test(ext_shader_stencil_export, VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, true); |
| 1118 | test(ext_conservative_rasterization, VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, | 1129 | test(ext_conservative_rasterization, VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, |
| 1119 | true); | 1130 | true); |
| 1131 | test(has_ext_depth_clip_control, VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME, false); | ||
| 1120 | test(has_ext_transform_feedback, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, false); | 1132 | test(has_ext_transform_feedback, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, false); |
| 1121 | test(has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, false); | 1133 | test(has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, false); |
| 1122 | test(has_ext_extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); | 1134 | test(has_ext_extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); |
| @@ -1280,6 +1292,19 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 1280 | ext_line_rasterization = true; | 1292 | ext_line_rasterization = true; |
| 1281 | } | 1293 | } |
| 1282 | } | 1294 | } |
| 1295 | if (has_ext_depth_clip_control) { | ||
| 1296 | VkPhysicalDeviceDepthClipControlFeaturesEXT depth_clip_control_features; | ||
| 1297 | depth_clip_control_features.sType = | ||
| 1298 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT; | ||
| 1299 | depth_clip_control_features.pNext = nullptr; | ||
| 1300 | features.pNext = &depth_clip_control_features; | ||
| 1301 | physical.GetFeatures2(features); | ||
| 1302 | |||
| 1303 | if (depth_clip_control_features.depthClipControl) { | ||
| 1304 | extensions.push_back(VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME); | ||
| 1305 | ext_depth_clip_control = true; | ||
| 1306 | } | ||
| 1307 | } | ||
| 1283 | if (has_khr_workgroup_memory_explicit_layout) { | 1308 | if (has_khr_workgroup_memory_explicit_layout) { |
| 1284 | VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR layout; | 1309 | VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR layout; |
| 1285 | layout.sType = | 1310 | layout.sType = |
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index 391b7604c..6a26c4e6e 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h | |||
| @@ -256,6 +256,11 @@ public: | |||
| 256 | return ext_depth_range_unrestricted; | 256 | return ext_depth_range_unrestricted; |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | /// Returns true if the device supports VK_EXT_depth_clip_control. | ||
| 260 | bool IsExtDepthClipControlSupported() const { | ||
| 261 | return ext_depth_clip_control; | ||
| 262 | } | ||
| 263 | |||
| 259 | /// Returns true if the device supports VK_EXT_shader_viewport_index_layer. | 264 | /// Returns true if the device supports VK_EXT_shader_viewport_index_layer. |
| 260 | bool IsExtShaderViewportIndexLayerSupported() const { | 265 | bool IsExtShaderViewportIndexLayerSupported() const { |
| 261 | return ext_shader_viewport_index_layer; | 266 | return ext_shader_viewport_index_layer; |
| @@ -454,6 +459,7 @@ private: | |||
| 454 | bool khr_swapchain_mutable_format{}; ///< Support for VK_KHR_swapchain_mutable_format. | 459 | bool khr_swapchain_mutable_format{}; ///< Support for VK_KHR_swapchain_mutable_format. |
| 455 | bool ext_index_type_uint8{}; ///< Support for VK_EXT_index_type_uint8. | 460 | bool ext_index_type_uint8{}; ///< Support for VK_EXT_index_type_uint8. |
| 456 | bool ext_sampler_filter_minmax{}; ///< Support for VK_EXT_sampler_filter_minmax. | 461 | bool ext_sampler_filter_minmax{}; ///< Support for VK_EXT_sampler_filter_minmax. |
| 462 | bool ext_depth_clip_control{}; ///< Support for VK_EXT_depth_clip_control | ||
| 457 | bool ext_depth_range_unrestricted{}; ///< Support for VK_EXT_depth_range_unrestricted. | 463 | bool ext_depth_range_unrestricted{}; ///< Support for VK_EXT_depth_range_unrestricted. |
| 458 | bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer. | 464 | bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer. |
| 459 | bool ext_tooling_info{}; ///< Support for VK_EXT_tooling_info. | 465 | bool ext_tooling_info{}; ///< Support for VK_EXT_tooling_info. |