diff options
Diffstat (limited to 'src/video_core/vulkan_common')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.h | 16 |
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{}; |