VK 1.1: Detect support for ShaderDrawParameters
authorDaniel Koch <dkoch@nvidia.com>
Fri, 29 Sep 2017 14:30:43 +0000 (10:30 -0400)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 3 Oct 2017 08:09:35 +0000 (04:09 -0400)
VK_KHR_shader_draw_parameters was included in Vulkan 1.1
but was made an optional feature.

VK-GL-CTS Issue: 691
Components: Vulkan

Affects: dEQP-VK.draw.shader_draw_parameters.*

Change-Id: I17b14230730d31339e12ec1454bc255ddf68268c
(cherry picked from commit ccdc778edd91b78472069102f2409d0a7ac835f0)

external/vulkancts/framework/vulkan/vkBasicTypes.inl
external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
external/vulkancts/framework/vulkan/vkStrUtil.inl
external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
external/vulkancts/framework/vulkan/vkStructTypes.inl
external/vulkancts/modules/vulkan/draw/vktDrawShaderDrawParametersTests.cpp
external/vulkancts/scripts/src/vulkan.h.in

index 35d3b81..24d4fd2 100644 (file)
@@ -198,7 +198,7 @@ enum VkStructureType
        VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO                                                   = 1000060014,
        VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT                                                                                  = 1000061000,
        VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN                                                                             = 1000062000,
-       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES                               = 100063000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES                                = 100063000,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES                                                              = 1000070000,
        VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO                                                               = 1000070001,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO                                    = 1000071000,
index 90027b4..b9334d0 100644 (file)
@@ -551,9 +551,9 @@ template<> VkStructureType getStructureType<VkDescriptorSetLayoutSupport> (void)
        return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT;
 }
 
-template<> VkStructureType getStructureType<VkPhysicalDeviceShaderDrawParametersFeatures> (void)
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderDrawParameterFeatures> (void)
 {
-       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES;
 }
 
 template<> VkStructureType getStructureType<VkDeviceGroupPresentCapabilitiesKHR> (void)
index 8161463..4b73d81 100644 (file)
@@ -450,7 +450,7 @@ std::ostream&       operator<<      (std::ostream& s, const VkPhysicalDeviceExternalSemapho
 std::ostream&  operator<<      (std::ostream& s, const VkExternalSemaphoreProperties& value);
 std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceMaintenance3Properties& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetLayoutSupport& value);
-std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderDrawParametersFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderDrawParameterFeatures& value);
 std::ostream&  operator<<      (std::ostream& s, const VkSurfaceCapabilitiesKHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkSurfaceFormatKHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupPresentCapabilitiesKHR& value);
index 7e47ebc..8fcb213 100644 (file)
@@ -207,7 +207,7 @@ const char* getStructureTypeName (VkStructureType value)
                case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:                                                             return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO";
                case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:                                                                                    return "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT";
                case VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN:                                                                               return "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN";
-               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:                                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES:                                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES:                                                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES";
                case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:                                                                 return "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:                                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO";
@@ -4528,9 +4528,9 @@ std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutSupport& v
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDrawParametersFeatures& value)
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDrawParameterFeatures& value)
 {
-       s << "VkPhysicalDeviceShaderDrawParametersFeatures = {\n";
+       s << "VkPhysicalDeviceShaderDrawParameterFeatures = {\n";
        s << "\tsType = " << value.sType << '\n';
        s << "\tpNext = " << value.pNext << '\n';
        s << "\tshaderDrawParameters = " << value.shaderDrawParameters << '\n';
index b660c10..64359ce 100644 (file)
@@ -1721,7 +1721,7 @@ struct VkDescriptorSetLayoutSupport
        VkBool32                supported;
 };
 
-struct VkPhysicalDeviceShaderDrawParametersFeatures
+struct VkPhysicalDeviceShaderDrawParameterFeatures
 {
        VkStructureType sType;
        void*                   pNext;
index 69ea702..2e2e8df 100644 (file)
@@ -113,6 +113,32 @@ DrawTest::DrawTest (Context &context, TestSpec testSpec)
                if (!vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_shader_draw_parameters"))
                        TCU_THROW(NotSupportedError, "Missing extension: VK_KHR_shader_draw_parameters");
 
+               // Shader draw parameters is part of Vulkan 1.1 but is optional
+               if (context.getUsedApiVersion() >= VK_API_VERSION_1_1)
+               {
+                       // Check if shader draw parameters is supported on the physical device.
+                       vk::VkPhysicalDeviceShaderDrawParameterFeatures drawParameters =
+                       {
+                               vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES,   // sType
+                               DE_NULL,                                                                                                                                // pNext
+                               VK_FALSE                                                                                                                                // shaderDrawParameters
+                       };
+                       vk::VkPhysicalDeviceFeatures                                    features;
+                       deMemset(&features, 0, sizeof(vk::VkPhysicalDeviceFeatures));
+
+                       vk::VkPhysicalDeviceFeatures2                                   featuresExt             =
+                       {
+                               vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,                                       // sType
+                               &drawParameters,                                                                                                        // pNext
+                               features
+                       };
+
+                       context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &featuresExt);
+
+                       if (drawParameters.shaderDrawParameters == VK_FALSE)
+                               TCU_THROW(NotSupportedError, "shaderDrawParameters feature not supported by the device");
+               }
+
                if (isMultiDraw() && !m_context.getDeviceFeatures().multiDrawIndirect)
                        TCU_THROW(NotSupportedError, "Missing feature: multiDrawIndirect");
 
index 9f538db..1a7d6ed 100644 (file)
@@ -249,7 +249,7 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014,
     VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
     VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 100063000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = 100063000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000,
     VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000,
@@ -4143,11 +4143,11 @@ typedef struct VkDescriptorSetLayoutSupport {
     VkBool32           supported;
 } VkDescriptorSetLayoutSupport;
 
-typedef struct VkPhysicalDeviceShaderDrawParametersFeatures {
+typedef struct VkPhysicalDeviceShaderDrawParameterFeatures {
     VkStructureType    sType;
     void*              pNext;
     VkBool32           shaderDrawParameters;
-} VkPhysicalDeviceShaderDrawParametersFeatures;
+} VkPhysicalDeviceShaderDrawParameterFeatures;
 
 typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t* pApiVersion);
 typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);