Add tests for VK_EXT_vertex_attribute_divisor
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 3 Jul 2018 15:07:48 +0000 (08:07 -0700)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Wed, 29 Aug 2018 07:38:36 +0000 (03:38 -0400)
New tests:
dEQP-VK.draw.instanced.*_attrib_divisor_*

Components: Vulkan

VK-GL-CTS issue: 1290

Change-Id: Idc6d247f47b18c783c24e30b91169fb9daf64bb3

17 files changed:
android/cts/master/vk-master.txt
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/framework/vulkan/vkTypeUtil.inl
external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.cpp
external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.hpp
external/vulkancts/modules/vulkan/draw/vktDrawInstancedTests.cpp
external/vulkancts/modules/vulkan/vktTestCase.cpp
external/vulkancts/modules/vulkan/vktTestCase.hpp
external/vulkancts/mustpass/1.1.3/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.3/vk-default.txt
external/vulkancts/scripts/src/vulkan.h.in
framework/referencerenderer/rrVertexAttrib.cpp
framework/referencerenderer/rrVertexAttrib.hpp

index e355145..26e78ea 100755 (executable)
@@ -265486,29 +265486,149 @@ dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.17_m
 dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.45_single_command
 dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.45_multi_command
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw_indexed
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw_indirect
index 586dcc5..54fbbfd 100644 (file)
@@ -321,6 +321,9 @@ enum VkStructureType
        VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT                                                              = 1000160000,
        VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT                                = 1000160001,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR                                             = 1000177000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT               = 1000190000,
+       VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT                   = 1000190001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT                 = 1000190002,
 };
 
 enum VkSystemAllocationScope
index d6a34fb..dc03462 100644 (file)
@@ -1121,3 +1121,18 @@ template<> VkStructureType getStructureType<VkExternalFormatANDROID> (void)
        return VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineVertexInputDivisorStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
+}
+
index a8e4d49..78aba07 100644 (file)
@@ -591,3 +591,7 @@ std::ostream&       operator<<      (std::ostream& s, const VkAndroidHardwareBufferFormatPr
 std::ostream&  operator<<      (std::ostream& s, const VkImportAndroidHardwareBufferInfoANDROID& value);
 std::ostream&  operator<<      (std::ostream& s, const VkMemoryGetAndroidHardwareBufferInfoANDROID& value);
 std::ostream&  operator<<      (std::ostream& s, const VkExternalFormatANDROID& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkVertexInputBindingDivisorDescriptionEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineVertexInputDivisorStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT& value);
index 89f16d7..6de9d49 100644 (file)
@@ -332,6 +332,9 @@ const char* getStructureTypeName (VkStructureType value)
                case VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT:                                                                return "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT";
                case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:                                  return "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:                             return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT";
                default:                                                                                                                                                                return DE_NULL;
        }
 }
@@ -6190,3 +6193,44 @@ std::ostream& operator<< (std::ostream& s, const VkExternalFormatANDROID& value)
        s << '}';
        return s;
 }
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxVertexAttribDivisor = " << value.maxVertexAttribDivisor << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDivisorDescriptionEXT& value)
+{
+       s << "VkVertexInputBindingDivisorDescriptionEXT = {\n";
+       s << "\tbinding = " << value.binding << '\n';
+       s << "\tdivisor = " << value.divisor << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineVertexInputDivisorStateCreateInfoEXT& value)
+{
+       s << "VkPipelineVertexInputDivisorStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tvertexBindingDivisorCount = " << value.vertexBindingDivisorCount << '\n';
+       s << "\tpVertexBindingDivisors = " << value.pVertexBindingDivisors << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tvertexAttributeInstanceRateDivisor = " << value.vertexAttributeInstanceRateDivisor << '\n';
+       s << "\tvertexAttributeInstanceRateZeroDivisor = " << value.vertexAttributeInstanceRateZeroDivisor << '\n';
+       s << '}';
+       return s;
+}
index 51f7c8d..e4c6312 100644 (file)
@@ -2953,6 +2953,35 @@ struct VkExternalFormatANDROID
        deUint64                externalFormat;
 };
 
+struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxVertexAttribDivisor;
+};
+
+struct VkVertexInputBindingDivisorDescriptionEXT
+{
+       deUint32        binding;
+       deUint32        divisor;
+};
+
+struct VkPipelineVertexInputDivisorStateCreateInfoEXT
+{
+       VkStructureType                                                                         sType;
+       const void*                                                                                     pNext;
+       deUint32                                                                                        vertexBindingDivisorCount;
+       const VkVertexInputBindingDivisorDescriptionEXT*        pVertexBindingDivisors;
+};
+
+struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                vertexAttributeInstanceRateDivisor;
+       VkBool32                vertexAttributeInstanceRateZeroDivisor;
+};
+
 
 
 
index b5c4fe6..cfda90f 100644 (file)
@@ -556,3 +556,11 @@ inline VkSampleLocationEXT makeSampleLocationEXT (float x, float y)
        res.y   = y;
        return res;
 }
+
+inline VkVertexInputBindingDivisorDescriptionEXT makeVertexInputBindingDivisorDescriptionEXT (deUint32 binding, deUint32 divisor)
+{
+       VkVertexInputBindingDivisorDescriptionEXT res;
+       res.binding     = binding;
+       res.divisor     = divisor;
+       return res;
+}
index 790f2ee..16bee00 100644 (file)
@@ -713,6 +713,20 @@ PipelineCreateInfo::VertexInputState::VertexInputState (deUint32                                                                           _verte
        pVertexAttributeDescriptions    = _pVertexAttributeDescriptions;
 }
 
+PipelineCreateInfo::VertexInputState& PipelineCreateInfo::VertexInputState::addDivisors (deUint32                                                                                              _vertexBindingDivisorCount,
+                                                                                                                                                                                const vk::VkVertexInputBindingDivisorDescriptionEXT*   _pVertexBindingDivisors)
+{
+       m_divisorState.sType = vk::VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT;
+       m_divisorState.vertexBindingDivisorCount = _vertexBindingDivisorCount;
+       m_divisorState.pVertexBindingDivisors = _pVertexBindingDivisors;
+
+       // Link it into the chainadd
+       m_divisorState.pNext = this->pNext;
+       pNext = &m_divisorState;
+
+       return *this;
+}
+
 PipelineCreateInfo::InputAssemblerState::InputAssemblerState (vk::VkPrimitiveTopology  _topology,
                                                                                                                          vk::VkBool32                          _primitiveRestartEnable)
 {
index 4935b4c..07ced4c 100644 (file)
@@ -308,6 +308,11 @@ public:
                                                  const vk::VkVertexInputBindingDescription*    pVertexBindingDescriptions              = NULL,
                                                  deUint32                                                                              vertexAttributeDescriptionCount = 0,
                                                  const vk::VkVertexInputAttributeDescription*  pVertexAttributeDescriptions    = NULL);
+
+               VertexInputState& addDivisors (deUint32                                                                                         vertexBindingDivisorCount = 0,
+                                                                          const vk::VkVertexInputBindingDivisorDescriptionEXT* pVertexBindingDivisors = NULL);
+
+               vk::VkPipelineVertexInputDivisorStateCreateInfoEXT m_divisorState;
        };
 
        class InputAssemblerState : public vk::VkPipelineInputAssemblyStateCreateInfo
index e5ac1ee..7a8a74e 100644 (file)
@@ -24,6 +24,8 @@
 
 #include "vktDrawInstancedTests.hpp"
 
+#include <climits>
+
 #include "deSharedPtr.hpp"
 #include "rrRenderer.hpp"
 #include "tcuImageCompare.hpp"
@@ -33,6 +35,7 @@
 #include "vkPrograms.hpp"
 #include "vkCmdUtil.hpp"
 #include "vkTypeUtil.hpp"
+#include "vkQueryUtil.hpp"
 #include "vktDrawBufferObjectUtil.hpp"
 #include "vktDrawCreateInfoUtil.hpp"
 #include "vktDrawImageObjectUtil.hpp"
@@ -63,6 +66,9 @@ struct TestParams
 
        DrawFunction                    function;
        vk::VkPrimitiveTopology topology;
+
+       deBool                                  testAttribDivisor;
+       deUint32                                attribDivisor;
 };
 
 struct VertexPositionAndColor
@@ -99,6 +105,10 @@ std::ostream & operator<<(std::ostream & str, TestParams const & v)
        }
 
        string << "_" << de::toString(v.topology);
+
+       if (v.testAttribDivisor)
+               string << "_attrib_divisor_" << v.attribDivisor;
+
        return str << string.str();
 }
 
@@ -163,9 +173,9 @@ public:
                for (int packetNdx = 0; packetNdx < numPackets; ++packetNdx)
                {
                        const int               instanceNdx             = packets[packetNdx]->instanceNdx + m_firstInstance;
-                       const tcu::Vec4 position                = rr::readVertexAttribFloat(inputs[0], instanceNdx,     packets[packetNdx]->vertexNdx);
-                       const tcu::Vec4 color                   = rr::readVertexAttribFloat(inputs[1], instanceNdx,     packets[packetNdx]->vertexNdx);
-                       const tcu::Vec4 color2                  = rr::readVertexAttribFloat(inputs[2], instanceNdx, packets[packetNdx]->vertexNdx);
+                       const tcu::Vec4 position                = rr::readVertexAttribFloat(inputs[0], packets[packetNdx]->instanceNdx, packets[packetNdx]->vertexNdx, m_firstInstance);
+                       const tcu::Vec4 color                   = rr::readVertexAttribFloat(inputs[1], packets[packetNdx]->instanceNdx, packets[packetNdx]->vertexNdx, m_firstInstance);
+                       const tcu::Vec4 color2                  = rr::readVertexAttribFloat(inputs[2], packets[packetNdx]->instanceNdx, packets[packetNdx]->vertexNdx, m_firstInstance);
                        packets[packetNdx]->position    = position + tcu::Vec4((float)(packets[packetNdx]->instanceNdx * 2.0 / m_numInstances), 0.0, 0.0, 0.0);
                        packets[packetNdx]->outputs[0]  = color + tcu::Vec4((float)instanceNdx / (float)m_numInstances, 0.0, 0.0, 1.0) + color2;
                }
@@ -209,7 +219,7 @@ public:
        virtual tcu::TestStatus                                         iterate                                 (void);
 
 private:
-       void                                                                            prepareVertexData               (int instanceCount, int firstInstance);
+       void                                                                            prepareVertexData               (int instanceCount, int firstInstance, int instanceDivisor);
 
        const TestParams                                                        m_params;
        const vk::DeviceInterface&                                      m_vk;
@@ -276,6 +286,19 @@ public:
 
        TestInstance* createInstance (Context& context) const
        {
+               if (m_params.testAttribDivisor)
+               {
+                       const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT& vertexAttributeDivisorFeatures = context.getVertexAttributeDivisorFeatures();
+                       if (!vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_EXT_vertex_attribute_divisor"))
+                               TCU_THROW(NotSupportedError, "Implementation does not support VK_EXT_vertex_attribute_divisor");
+
+                       if (m_params.attribDivisor != 1 && !vertexAttributeDivisorFeatures.vertexAttributeInstanceRateDivisor)
+                               TCU_THROW(NotSupportedError, "Implementation does not support vertexAttributeInstanceRateDivisor");
+
+                       if (m_params.attribDivisor == 0 && !vertexAttributeDivisorFeatures.vertexAttributeInstanceRateZeroDivisor)
+                               TCU_THROW(NotSupportedError, "Implementation does not support vertexAttributeInstanceRateDivisorZero");
+               }
+
                return new InstancedDrawInstance(context, m_params);
        }
 
@@ -395,6 +418,14 @@ InstancedDrawInstance::InstancedDrawInstance(Context &context, TestParams params
                                                                                                                          DE_LENGTH_OF_ARRAY(vertexInputAttributeDescriptions),
                                                                                                                          vertexInputAttributeDescriptions);
 
+       const vk::VkVertexInputBindingDivisorDescriptionEXT vertexInputBindingDivisorDescription =
+       {
+               1u,
+               m_params.attribDivisor,
+       };
+       if (m_params.testAttribDivisor)
+               m_vertexInputState.addDivisors(1, &vertexInputBindingDivisorDescription);
+
        const CmdPoolCreateInfo cmdPoolCreateInfo(queueFamilyIndex);
        m_cmdPool = vk::createCommandPool(m_vk, device, &cmdPoolCreateInfo);
 
@@ -447,7 +478,7 @@ tcu::TestStatus InstancedDrawInstance::iterate()
                        const deUint32                          prepareCount                    = de::max(instanceCount, 1u);
                        const deUint32                          firstInstance                   = firstInstanceIndices[firstInstanceIndexNdx];
 
-                       prepareVertexData(prepareCount, firstInstance);
+                       prepareVertexData(prepareCount, firstInstance, m_params.testAttribDivisor ? m_params.attribDivisor : 1);
                        const de::SharedPtr<Buffer>     vertexBuffer                    = createAndUploadBuffer(m_data, m_vk, m_context, vk::VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
                        const de::SharedPtr<Buffer>     instancedVertexBuffer   = createAndUploadBuffer(m_instancedColor, m_vk, m_context, vk::VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
                        de::SharedPtr<Buffer>           indexBuffer;
@@ -579,7 +610,8 @@ tcu::TestStatus InstancedDrawInstance::iterate()
                        {
                                rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, sizeof(tcu::Vec4), 0, &vetrices[0]),
                                rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, sizeof(tcu::Vec4), 0, &colors[0]),
-                               rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, sizeof(tcu::Vec4), 1, &m_instancedColor[0])
+                               // The reference renderer treats a divisor of 0 as meaning per-vertex.  Use INT_MAX instead; it should work just as well.
+                               rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, sizeof(tcu::Vec4), m_params.testAttribDivisor ? (m_params.attribDivisor == 0 ? INT_MAX : m_params.attribDivisor) : 1, &m_instancedColor[0])
                        };
 
                        if (m_params.function == TestParams::FUNCTION_DRAW || m_params.function == TestParams::FUNCTION_DRAW_INDIRECT)
@@ -630,7 +662,7 @@ tcu::TestStatus InstancedDrawInstance::iterate()
        return tcu::TestStatus(res, qpGetTestResultName(res));
 }
 
-void InstancedDrawInstance::prepareVertexData(int instanceCount, int firstInstance)
+void InstancedDrawInstance::prepareVertexData(int instanceCount, int firstInstance, int instanceDivisor)
 {
        m_data.clear();
        m_indexes.clear();
@@ -695,9 +727,10 @@ void InstancedDrawInstance::prepareVertexData(int instanceCount, int firstInstan
                }
        }
 
+       const int colorCount = instanceDivisor == 0 ? 1 : (instanceCount + firstInstance + instanceDivisor - 1) / instanceDivisor;
        for (int i = 0; i < instanceCount + firstInstance; i++)
        {
-               m_instancedColor.push_back(tcu::Vec4(0.0, (float)(1.0 - i * 1.0 / (instanceCount + firstInstance)) / 2, 0.0, 1.0));
+               m_instancedColor.push_back(tcu::Vec4(0.0, (float)(1.0 - i * 1.0 / colorCount) / 2, 0.0, 1.0));
        }
 }
 
@@ -723,17 +756,31 @@ InstancedTests::InstancedTests(tcu::TestContext& testCtx)
                TestParams::FUNCTION_DRAW_INDEXED_INDIRECT,
        };
 
+       static const deUint32 divisors[] = { 0, 1, 2, 4, 20 };
+
        for (int topologyNdx = 0; topologyNdx < DE_LENGTH_OF_ARRAY(topologies); topologyNdx++)
        {
                for (int functionNdx = 0; functionNdx < DE_LENGTH_OF_ARRAY(functions); functionNdx++)
                {
-                       TestParams param;
-                       param.function = functions[functionNdx];
-                       param.topology = topologies[topologyNdx];
+                       for (int testAttribDivisor = 0; testAttribDivisor < 2; testAttribDivisor++)
+                       {
+                               for (int divisorNdx = 0; divisorNdx < DE_LENGTH_OF_ARRAY(divisors); divisorNdx++)
+                               {
+                                       // If we don't have VK_EXT_vertex_attribute_divisor, we only get a divisor or 1.
+                                       if (!testAttribDivisor && divisors[divisorNdx] != 1)
+                                               continue;
+
+                                       TestParams param;
+                                       param.function = functions[functionNdx];
+                                       param.topology = topologies[topologyNdx];
+                                       param.testAttribDivisor = testAttribDivisor ? DE_TRUE : DE_FALSE;
+                                       param.attribDivisor = divisors[divisorNdx];
 
-                       std::string testName = de::toString(param);
+                                       std::string testName = de::toString(param);
 
-                       addChild(new InstancedDrawCase(m_testCtx, de::toLower(testName), "Instanced drawing test", param));
+                                       addChild(new InstancedDrawCase(m_testCtx, de::toLower(testName), "Instanced drawing test", param));
+                               }
+                       }
                }
        }
 }
index b637a5c..cb61dd2 100644 (file)
@@ -311,6 +311,7 @@ public:
        VkPhysicalDevice8BitStorageFeaturesKHR                  eightBitStorageFeatures;
        VkPhysicalDevice16BitStorageFeatures                    sixteenBitStorageFeatures;
        VkPhysicalDeviceVariablePointerFeatures                 variablePointerFeatures;
+       VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT       vertexAttributeDivisorFeatures;
 
        DeviceFeatures (const InstanceInterface&        vki,
                                        const deUint32                          apiVersion,
@@ -323,12 +324,14 @@ public:
                deMemset(&eightBitStorageFeatures, 0, sizeof(eightBitStorageFeatures));
                deMemset(&sixteenBitStorageFeatures, 0, sizeof(sixteenBitStorageFeatures));
                deMemset(&variablePointerFeatures, 0, sizeof(variablePointerFeatures));
+               deMemset(&vertexAttributeDivisorFeatures, 0, sizeof(vertexAttributeDivisorFeatures));
 
                coreFeatures.sType                                              = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
                samplerYCbCrConversionFeatures.sType    = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
                eightBitStorageFeatures.sType                   = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR;
                sixteenBitStorageFeatures.sType                 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR;
                variablePointerFeatures.sType                   = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR;
+               vertexAttributeDivisorFeatures.sType    = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
 
                if (isPhysicalDeviceFeatures2Supported(apiVersion, instanceExtensions))
                {
@@ -354,6 +357,11 @@ public:
                                *nextPtr        = &variablePointerFeatures;
                                nextPtr         = &variablePointerFeatures.pNext;
                        }
+                       if (de::contains(deviceExtensions.begin(), deviceExtensions.end(), "VK_EXT_vertex_attribute_divisor"))
+                       {
+                               *nextPtr        = &vertexAttributeDivisorFeatures;
+                               nextPtr         = &vertexAttributeDivisorFeatures.pNext;
+                       }
 
                        vki.getPhysicalDeviceFeatures2(physicalDevice, &coreFeatures);
                }
@@ -386,6 +394,7 @@ public:
        const VkPhysicalDevice8BitStorageFeaturesKHR&                   get8BitStorageFeatures                          (void) const    { return m_deviceFeatures.eightBitStorageFeatures;                      }
        const VkPhysicalDevice16BitStorageFeatures&                             get16BitStorageFeatures                         (void) const    { return m_deviceFeatures.sixteenBitStorageFeatures;            }
        const VkPhysicalDeviceVariablePointerFeatures&                  getVariablePointerFeatures                      (void) const    { return m_deviceFeatures.variablePointerFeatures;                      }
+       const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&        getVertexAttributeDivisorFeatures       (void) const    { return m_deviceFeatures.vertexAttributeDivisorFeatures;       }
        VkDevice                                                                                                getDevice                                                       (void) const    { return *m_device;                                                                                     }
        const DeviceInterface&                                                                  getDeviceInterface                                      (void) const    { return m_deviceInterface;                                                                     }
        const VkPhysicalDeviceProperties&                                               getDeviceProperties                                     (void) const    { return m_deviceProperties;                                                            }
@@ -512,6 +521,8 @@ const vk::VkPhysicalDevice16BitStorageFeatures&
                                                                                Context::get16BitStorageFeatures                (void) const { return m_device->get16BitStorageFeatures();              }
 const vk::VkPhysicalDeviceVariablePointerFeatures&
                                                                                Context::getVariablePointerFeatures             (void) const { return m_device->getVariablePointerFeatures();   }
+const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&
+                                                                               Context::getVertexAttributeDivisorFeatures      (void) const { return m_device->getVertexAttributeDivisorFeatures();    }
 const vk::VkPhysicalDeviceProperties&  Context::getDeviceProperties                    (void) const { return m_device->getDeviceProperties();                  }
 const vector<string>&                                  Context::getDeviceExtensions                    (void) const { return m_device->getDeviceExtensions();                  }
 vk::VkDevice                                                   Context::getDevice                                              (void) const { return m_device->getDevice();                                    }
index 27f7ed2..82a816d 100644 (file)
@@ -78,6 +78,8 @@ public:
                                                                                                get16BitStorageFeatures                 (void) const;
        const vk::VkPhysicalDeviceVariablePointerFeatures&
                                                                                                getVariablePointerFeatures              (void) const;
+       const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&
+                                                                                               getVertexAttributeDivisorFeatures       (void) const;
        const vk::VkPhysicalDeviceProperties&           getDeviceProperties                             (void) const;
        const std::vector<std::string>&                         getDeviceExtensions                             (void) const;
        vk::VkDevice                                                            getDevice                                               (void) const;
index ca20342..96cd9bc 100644 (file)
@@ -265559,29 +265559,149 @@ dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.17_m
 dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.45_single_command
 dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.45_multi_command
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw_indexed
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw_indirect
index cea3561..9880154 100644 (file)
@@ -265521,29 +265521,149 @@ dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.17_m
 dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.45_single_command
 dEQP-VK.draw.basic_draw.draw_indexed_indirect.triangle_strip_with_adjacency.45_multi_command
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_line_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_strip_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_0
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_1
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_2
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_4
+dEQP-VK.draw.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_20
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw_indexed
 dEQP-VK.draw.shader_draw_parameters.base_vertex.draw_indirect
index 2b083bb..9dca8d1 100755 (executable)
@@ -385,6 +385,9 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
     VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = 1000177000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
     VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
@@ -7712,6 +7715,37 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
     struct AHardwareBuffer**                    pBuffer);
 #endif
 
+
+#define VK_EXT_vertex_attribute_divisor 1
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
+
+typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxVertexAttribDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT;
+
+typedef struct VkVertexInputBindingDivisorDescriptionEXT {
+    uint32_t    binding;
+    uint32_t    divisor;
+} VkVertexInputBindingDivisorDescriptionEXT;
+
+typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT {
+    VkStructureType                                     sType;
+    const void*                                         pNext;
+    uint32_t                                            vertexBindingDivisorCount;
+    const VkVertexInputBindingDivisorDescriptionEXT*    pVertexBindingDivisors;
+} VkPipelineVertexInputDivisorStateCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           vertexAttributeInstanceRateDivisor;
+    VkBool32           vertexAttributeInstanceRateZeroDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT;
+
+
 #define VK_NV_shader_subgroup_partitioned 1
 #define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1
 #define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned"
index f07592f..b72b837 100644 (file)
@@ -488,13 +488,13 @@ bool isValidVertexAttrib (const VertexAttrib& vertexAttrib)
        return true;
 }
 
-void readVertexAttrib (tcu::Vec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx)
+void readVertexAttrib (tcu::Vec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx)
 {
        DE_ASSERT(isValidVertexAttrib(vertexAttrib));
 
        if (vertexAttrib.pointer)
        {
-               const int       elementNdx              = (vertexAttrib.instanceDivisor != 0) ? (instanceNdx / vertexAttrib.instanceDivisor) : vertexNdx;
+               const int       elementNdx              = (vertexAttrib.instanceDivisor != 0) ? baseInstanceNdx + (instanceNdx / vertexAttrib.instanceDivisor) : vertexNdx;
                const int       compSize                = getComponentSize(vertexAttrib.type);
                const int       stride                  = (vertexAttrib.stride != 0) ? (vertexAttrib.stride) : (vertexAttrib.size*compSize);
                const int       byteOffset              = elementNdx*stride;
@@ -508,13 +508,13 @@ void readVertexAttrib (tcu::Vec4& dst, const VertexAttrib& vertexAttrib, const i
        }
 }
 
-void readVertexAttrib (tcu::IVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx)
+void readVertexAttrib (tcu::IVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx)
 {
        DE_ASSERT(isValidVertexAttrib(vertexAttrib));
 
        if (vertexAttrib.pointer)
        {
-               const int       elementNdx              = (vertexAttrib.instanceDivisor != 0) ? (instanceNdx / vertexAttrib.instanceDivisor) : vertexNdx;
+               const int       elementNdx              = (vertexAttrib.instanceDivisor != 0) ? baseInstanceNdx + (instanceNdx / vertexAttrib.instanceDivisor) : vertexNdx;
                const int       compSize                = getComponentSize(vertexAttrib.type);
                const int       stride                  = (vertexAttrib.stride != 0) ? (vertexAttrib.stride) : (vertexAttrib.size*compSize);
                const int       byteOffset              = elementNdx*stride;
@@ -528,13 +528,13 @@ void readVertexAttrib (tcu::IVec4& dst, const VertexAttrib& vertexAttrib, const
        }
 }
 
-void readVertexAttrib (tcu::UVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx)
+void readVertexAttrib (tcu::UVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx)
 {
        DE_ASSERT(isValidVertexAttrib(vertexAttrib));
 
        if (vertexAttrib.pointer)
        {
-               const int       elementNdx              = (vertexAttrib.instanceDivisor != 0) ? (instanceNdx / vertexAttrib.instanceDivisor) : vertexNdx;
+               const int       elementNdx              = (vertexAttrib.instanceDivisor != 0) ? baseInstanceNdx + (instanceNdx / vertexAttrib.instanceDivisor) : vertexNdx;
                const int       compSize                = getComponentSize(vertexAttrib.type);
                const int       stride                  = (vertexAttrib.stride != 0) ? (vertexAttrib.stride) : (vertexAttrib.size*compSize);
                const int       byteOffset              = elementNdx*stride;
index 74846db..f9e3a85 100644 (file)
@@ -148,30 +148,30 @@ struct VertexAttrib
 bool           isValidVertexAttrib             (const VertexAttrib& vertexAttrib);
 // \todo [2013-04-01 pyry] Queries: isReadFloatValid(), isReadIntValid() ...
 
-void           readVertexAttrib                (tcu::Vec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx);
-void           readVertexAttrib                (tcu::IVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx);
-void           readVertexAttrib                (tcu::UVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx);
+void           readVertexAttrib                (tcu::Vec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx = 0);
+void           readVertexAttrib                (tcu::IVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx = 0);
+void           readVertexAttrib                (tcu::UVec4& dst, const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx = 0);
 
 // Helpers that return by value (trivial for compiler to optimize).
 
-inline tcu::Vec4 readVertexAttribFloat (const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx)
+inline tcu::Vec4 readVertexAttribFloat (const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx = 0)
 {
        tcu::Vec4 v;
-       readVertexAttrib(v, vertexAttrib, instanceNdx, vertexNdx);
+       readVertexAttrib(v, vertexAttrib, instanceNdx, vertexNdx, baseInstanceNdx);
        return v;
 }
 
-inline tcu::IVec4 readVertexAttribInt (const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx)
+inline tcu::IVec4 readVertexAttribInt (const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx = 0)
 {
        tcu::IVec4 v;
-       readVertexAttrib(v, vertexAttrib, instanceNdx, vertexNdx);
+       readVertexAttrib(v, vertexAttrib, instanceNdx, vertexNdx, baseInstanceNdx);
        return v;
 }
 
-inline tcu::UVec4 readVertexAttribUint (const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx)
+inline tcu::UVec4 readVertexAttribUint (const VertexAttrib& vertexAttrib, const int instanceNdx, const int vertexNdx, const int baseInstanceNdx = 0)
 {
        tcu::UVec4 v;
-       readVertexAttrib(v, vertexAttrib, instanceNdx, vertexNdx);
+       readVertexAttrib(v, vertexAttrib, instanceNdx, vertexNdx, baseInstanceNdx);
        return v;
 }