layers: Add shader_subgroup_vote ext shader caps
authorMark Lobodzinski <mark@lunarg.com>
Tue, 28 Mar 2017 20:09:16 +0000 (14:09 -0600)
committerMark Lobodzinski <mark@lunarg.com>
Wed, 29 Mar 2017 16:58:32 +0000 (10:58 -0600)
Recognize and validate shader capabilities added in the new
VK_KHR_shader_subgroup_vote extension.

Change-Id: Ifbbcb1aa3b056707750c53d9a18965bfcae9028f

layers/core_validation.cpp
layers/core_validation_types.h

index c4cba30..a2d5b3a 100644 (file)
@@ -2552,6 +2552,11 @@ static bool validate_shader_capabilities(layer_data *dev_data, shader_module con
                                               VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME);
                     break;
 
+                case spv::CapabilitySubgroupVoteKHR:
+                    pass &= require_extension(report_data, dev_data->device_extensions.khr_subgroup_vote_enabled,
+                                              VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME);
+                    break;
+
                 default:
                     // Spirv-validator should catch these errors
                     break;
@@ -3867,7 +3872,7 @@ static void checkDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo,
     dev_data->device_extensions.nv_sample_mask_override_coverage_enabled = false;
     dev_data->device_extensions.nv_viewport_array2_enabled = false;
     dev_data->device_extensions.khr_subgroup_ballot_enabled = false;
-
+    dev_data->device_extensions.khr_subgroup_vote_enabled = false;
 
     for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) {
@@ -3900,6 +3905,10 @@ static void checkDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo,
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME) == 0) {
             dev_data->device_extensions.khr_subgroup_ballot_enabled = true;
         }
+        if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME) == 0) {
+            dev_data->device_extensions.khr_subgroup_vote_enabled = true;
+        }
+
     }
 }
 
index 5dd0dbf..246040f 100644 (file)
@@ -795,6 +795,8 @@ struct devExts {
     bool nv_sample_mask_override_coverage_enabled;
     bool nv_viewport_array2_enabled;
     bool khr_subgroup_ballot_enabled;
+    bool khr_subgroup_vote_enabled;
+
     std::unordered_map<VkSwapchainKHR, std::unique_ptr<SWAPCHAIN_NODE>> swapchainMap;
     std::unordered_map<VkImage, VkSwapchainKHR> imageToSwapchainMap;
 };