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
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
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;
+}
+
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);
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;
}
}
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;
+}
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;
+};
+
res.y = y;
return res;
}
+
+inline VkVertexInputBindingDivisorDescriptionEXT makeVertexInputBindingDivisorDescriptionEXT (deUint32 binding, deUint32 divisor)
+{
+ VkVertexInputBindingDivisorDescriptionEXT res;
+ res.binding = binding;
+ res.divisor = divisor;
+ return res;
+}
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)
{
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
#include "vktDrawInstancedTests.hpp"
+#include <climits>
+
#include "deSharedPtr.hpp"
#include "rrRenderer.hpp"
#include "tcuImageCompare.hpp"
#include "vkPrograms.hpp"
#include "vkCmdUtil.hpp"
#include "vkTypeUtil.hpp"
+#include "vkQueryUtil.hpp"
#include "vktDrawBufferObjectUtil.hpp"
#include "vktDrawCreateInfoUtil.hpp"
#include "vktDrawImageObjectUtil.hpp"
DrawFunction function;
vk::VkPrimitiveTopology topology;
+
+ deBool testAttribDivisor;
+ deUint32 attribDivisor;
};
struct VertexPositionAndColor
}
string << "_" << de::toString(v.topology);
+
+ if (v.testAttribDivisor)
+ string << "_attrib_divisor_" << v.attribDivisor;
+
return str << string.str();
}
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;
}
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;
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);
}
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);
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;
{
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)
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();
}
}
+ 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));
}
}
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));
+ }
+ }
}
}
}
VkPhysicalDevice8BitStorageFeaturesKHR eightBitStorageFeatures;
VkPhysicalDevice16BitStorageFeatures sixteenBitStorageFeatures;
VkPhysicalDeviceVariablePointerFeatures variablePointerFeatures;
+ VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertexAttributeDivisorFeatures;
DeviceFeatures (const InstanceInterface& vki,
const deUint32 apiVersion,
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))
{
*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);
}
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; }
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(); }
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;
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
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
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),
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"
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;
}
}
-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;
}
}
-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;
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;
}