// This is manually created file used by gen_framework.py.
// It contains list of mandatory features required to
// generate code for cts. Currently every line contains:
// * name of structure containing physical device featurs
// * name of attribute that is mandatory
// * structure type enum
// * required extensions that enable specified feature

VkPhysicalDeviceFeatures								robustBufferAccess									REQUIREMENTS ()
VkPhysicalDeviceFeatures								shaderSampledImageArrayDynamicIndexing				REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceFeatures								shaderStorageBufferArrayDynamicIndexing				REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDevice8BitStorageFeaturesKHR					storageBuffer8BitAccess								REQUIREMENTS ( VK_KHR_8bit_storage )
VkPhysicalDeviceVulkan11Features						multiview											REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
VkPhysicalDeviceMultiviewFeatures						multiview											REQUIREMENTS ( "ApiVersion(1, 1, 0)" )
VkPhysicalDeviceMultiviewFeatures						multiview											REQUIREMENTS ( VK_KHR_multiview )
VkPhysicalDeviceVariablePointersFeatures				variablePointersStorageBuffer						REQUIREMENTS ( VK_KHR_variable_pointers )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			shaderUniformTexelBufferArrayDynamicIndexing		REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			shaderStorageTexelBufferArrayDynamicIndexing		REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			shaderSampledImageArrayNonUniformIndexing			REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			shaderStorageBufferArrayNonUniformIndexing			REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			shaderUniformTexelBufferArrayNonUniformIndexing		REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			descriptorBindingSampledImageUpdateAfterBind		REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			descriptorBindingStorageImageUpdateAfterBind		REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			descriptorBindingStorageBufferUpdateAfterBind		REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			descriptorBindingUniformTexelBufferUpdateAfterBind	REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			descriptorBindingStorageTexelBufferUpdateAfterBind	REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			descriptorBindingUpdateUnusedWhilePending			REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			descriptorBindingPartiallyBound						REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceDescriptorIndexingFeaturesEXT			runtimeDescriptorArray								REQUIREMENTS ( VK_EXT_descriptor_indexing )
VkPhysicalDeviceInlineUniformBlockFeaturesEXT			inlineUniformBlock									REQUIREMENTS ( VK_EXT_inline_uniform_block )
VkPhysicalDeviceInlineUniformBlockFeaturesEXT			descriptorBindingInlineUniformBlockUpdateAfterBind	REQUIREMENTS ( VK_EXT_inline_uniform_block VK_EXT_descriptor_indexing )
VkPhysicalDeviceScalarBlockLayoutFeaturesEXT			scalarBlockLayout									REQUIREMENTS ( VK_EXT_scalar_block_layout )
VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR	uniformBufferStandardLayout							REQUIREMENTS ( VK_KHR_uniform_buffer_standard_layout )
VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR	pipelineExecutableInfo								REQUIREMENTS ( VK_KHR_pipeline_executable_properties )
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT			subgroupSizeControl									REQUIREMENTS ( VK_EXT_subgroup_size_control )
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT			computeFullSubgroups								REQUIREMENTS ( VK_EXT_subgroup_size_control )
VkPhysicalDeviceVulkan12Features						subgroupBroadcastDynamicId							REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
VkPhysicalDeviceVulkan12Features						imagelessFramebuffer								REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
VkPhysicalDeviceVulkan12Features						uniformBufferStandardLayout							REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
VkPhysicalDeviceVulkan12Features						separateDepthStencilLayouts							REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
VkPhysicalDeviceVulkan12Features						hostQueryReset										REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
VkPhysicalDeviceTimelineSemaphoreFeaturesKHR 			timelineSemaphore									REQUIREMENTS ( VK_KHR_timeline_semaphore )
VkPhysicalDeviceVulkan12Features						timelineSemaphore									REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
VkPhysicalDeviceVulkan12Features						shaderUniformTexelBufferArrayDynamicIndexing		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						shaderStorageTexelBufferArrayDynamicIndexing		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						shaderSampledImageArrayNonUniformIndexing			REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						shaderStorageBufferArrayNonUniformIndexing			REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						shaderUniformTexelBufferArrayNonUniformIndexing		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						descriptorBindingSampledImageUpdateAfterBind		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						descriptorBindingStorageImageUpdateAfterBind		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						descriptorBindingStorageBufferUpdateAfterBind		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						descriptorBindingUniformTexelBufferUpdateAfterBind	REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						descriptorBindingStorageTexelBufferUpdateAfterBind	REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						descriptorBindingUpdateUnusedWhilePending			REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						descriptorBindingPartiallyBound						REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
VkPhysicalDeviceVulkan12Features						runtimeDescriptorArray								REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
