summaryrefslogtreecommitdiff
path: root/src/video_core/vulkan_common
diff options
context:
space:
mode:
authorGravatar liamwhite2022-12-17 16:08:10 -0500
committerGravatar GitHub2022-12-17 16:08:10 -0500
commit5da72a891fb4c4ddddbeefc0b235079fa3830743 (patch)
treecd4006e1a4e50c298ebb3004341191203ac11c56 /src/video_core/vulkan_common
parentMerge pull request #9461 from liamwhite/wanative (diff)
parentVulkan: Add support for VK_EXT_depth_clip_control. (diff)
downloadyuzu-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.cpp25
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h6
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.