summaryrefslogtreecommitdiff
path: root/src/video_core/vulkan_common
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/vulkan_common')
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp4
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h16
2 files changed, 20 insertions, 0 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp
index 9743a82f5..70436cf1c 100644
--- a/src/video_core/vulkan_common/vulkan_device.cpp
+++ b/src/video_core/vulkan_common/vulkan_device.cpp
@@ -905,6 +905,10 @@ bool Device::GetSuitability(bool requires_swapchain) {
905 properties.driver.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES; 905 properties.driver.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES;
906 SetNext(next, properties.driver); 906 SetNext(next, properties.driver);
907 907
908 // Retrieve subgroup properties.
909 properties.subgroup_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
910 SetNext(next, properties.subgroup_properties);
911
908 // Retrieve relevant extension properties. 912 // Retrieve relevant extension properties.
909 if (extensions.shader_float_controls) { 913 if (extensions.shader_float_controls) {
910 properties.float_controls.sType = 914 properties.float_controls.sType =
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index 7be631122..e05d04db3 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -323,6 +323,11 @@ public:
323 return properties.subgroup_size_control.requiredSubgroupSizeStages & stage; 323 return properties.subgroup_size_control.requiredSubgroupSizeStages & stage;
324 } 324 }
325 325
326 /// Returns true if the device supports the provided subgroup feature.
327 bool IsSubgroupFeatureSupported(VkSubgroupFeatureFlagBits feature) const {
328 return properties.subgroup_properties.supportedOperations & feature;
329 }
330
326 /// Returns the maximum number of push descriptors. 331 /// Returns the maximum number of push descriptors.
327 u32 MaxPushDescriptors() const { 332 u32 MaxPushDescriptors() const {
328 return properties.push_descriptor.maxPushDescriptors; 333 return properties.push_descriptor.maxPushDescriptors;
@@ -388,6 +393,11 @@ public:
388 return extensions.swapchain_mutable_format; 393 return extensions.swapchain_mutable_format;
389 } 394 }
390 395
396 /// Returns true if VK_KHR_shader_float_controls is enabled.
397 bool IsKhrShaderFloatControlsSupported() const {
398 return extensions.shader_float_controls;
399 }
400
391 /// Returns true if the device supports VK_KHR_workgroup_memory_explicit_layout. 401 /// Returns true if the device supports VK_KHR_workgroup_memory_explicit_layout.
392 bool IsKhrWorkgroupMemoryExplicitLayoutSupported() const { 402 bool IsKhrWorkgroupMemoryExplicitLayoutSupported() const {
393 return extensions.workgroup_memory_explicit_layout; 403 return extensions.workgroup_memory_explicit_layout;
@@ -487,6 +497,11 @@ public:
487 return extensions.shader_stencil_export; 497 return extensions.shader_stencil_export;
488 } 498 }
489 499
500 /// Returns true if the device supports VK_EXT_shader_demote_to_helper_invocation
501 bool IsExtShaderDemoteToHelperInvocationSupported() const {
502 return extensions.shader_demote_to_helper_invocation;
503 }
504
490 /// Returns true if the device supports VK_EXT_conservative_rasterization. 505 /// Returns true if the device supports VK_EXT_conservative_rasterization.
491 bool IsExtConservativeRasterizationSupported() const { 506 bool IsExtConservativeRasterizationSupported() const {
492 return extensions.conservative_rasterization; 507 return extensions.conservative_rasterization;
@@ -684,6 +699,7 @@ private:
684 699
685 struct Properties { 700 struct Properties {
686 VkPhysicalDeviceDriverProperties driver{}; 701 VkPhysicalDeviceDriverProperties driver{};
702 VkPhysicalDeviceSubgroupProperties subgroup_properties{};
687 VkPhysicalDeviceFloatControlsProperties float_controls{}; 703 VkPhysicalDeviceFloatControlsProperties float_controls{};
688 VkPhysicalDevicePushDescriptorPropertiesKHR push_descriptor{}; 704 VkPhysicalDevicePushDescriptorPropertiesKHR push_descriptor{};
689 VkPhysicalDeviceSubgroupSizeControlProperties subgroup_size_control{}; 705 VkPhysicalDeviceSubgroupSizeControlProperties subgroup_size_control{};