Fix mandatory features checks for vk1.3

This change fixes:
* feature_extensions_consistency test that required some of
  extensions that were promoted to vk1.3 to be present
  which is not mandatory.
* device_mandatory_features test that didn't check for
  vk1.3 mandatory features

Components: Vulkan

Affects:
dEQP-VK.api.info.vulkan1p3.feature_extensions_consistency
dEQP-VK.info.device_mandatory_features

Change-Id: Ife0251617e773d028647148f5538b837dcf13221
diff --git a/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl b/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
index 4bbbc37..29c81fe 100644
--- a/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
+++ b/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
@@ -587,6 +587,16 @@
 		nextPtr  = &physicalDeviceVulkan12Features.pNext;
 	}
 
+	vk::VkPhysicalDeviceVulkan13Features physicalDeviceVulkan13Features;
+	deMemset(&physicalDeviceVulkan13Features, 0, sizeof(physicalDeviceVulkan13Features));
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		physicalDeviceVulkan13Features.sType = getStructureType<VkPhysicalDeviceVulkan13Features>();
+		*nextPtr = &physicalDeviceVulkan13Features;
+		nextPtr  = &physicalDeviceVulkan13Features.pNext;
+	}
+
 	vk::VkPhysicalDeviceVulkanMemoryModelFeaturesKHR physicalDeviceVulkanMemoryModelFeaturesKHR;
 	deMemset(&physicalDeviceVulkanMemoryModelFeaturesKHR, 0, sizeof(physicalDeviceVulkanMemoryModelFeaturesKHR));
 
@@ -1953,6 +1963,132 @@
 		}
 	}
 
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.robustImageAccess == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature robustImageAccess not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.inlineUniformBlock == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature inlineUniformBlock not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingInlineUniformBlockUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.pipelineCreationCacheControl == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature pipelineCreationCacheControl not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.privateData == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature privateData not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.shaderDemoteToHelperInvocation == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.shaderTerminateInvocation == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.subgroupSizeControl == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.computeFullSubgroups == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.synchronization2 == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature synchronization2 not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderZeroInitializeWorkgroupMemory not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.dynamicRendering == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature dynamicRendering not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.shaderIntegerDotProduct == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderIntegerDotProduct not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 3, 0)) )
+	{
+		if ( physicalDeviceVulkan13Features.maintenance4 == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature maintenance4 not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
 	return result;
 }
 
diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
index 71dfbe5..9c8a5db 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
@@ -5587,37 +5587,35 @@
 	if (!context.contextSupports(vk::ApiVersion(1, 3, 0)))
 		TCU_THROW(NotSupportedError, "At least Vulkan 1.3 required to run test");
 
-	VkPhysicalDeviceVulkan13Features	vulkan13Features	= initVulkanStructure();
-	VkPhysicalDeviceFeatures2			extFeatures			= initVulkanStructure(&vulkan13Features);
+	VkPhysicalDeviceVulkan13Features					vulkan13Features				= initVulkanStructure();
+	VkPhysicalDeviceFeatures2							extFeatures						= initVulkanStructure(&vulkan13Features);
 
 	vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
 
 	log << TestLog::Message << vulkan13Features << TestLog::EndMessage;
 
-	// Validate if required VkPhysicalDeviceVulkan13Features fields are set and that corresponding extensions are present
-	std::pair<std::pair<const char*,const char*>, VkBool32> extensions2validate[] =
+	// Validate if required VkPhysicalDeviceVulkan13Features fields are set
+	std::pair<const char*, VkBool32> features2validate[]
 	{
-		{ { "VK_EXT_image_robustness",						"VkPhysicalDeviceVulkan13Features.robustImageAccess" },						vulkan13Features.robustImageAccess },
-		{ { "VK_EXT_inline_uniform_block",					"VkPhysicalDeviceVulkan13Features.inlineUniformBlock" },					vulkan13Features.inlineUniformBlock },
-		{ { "VK_EXT_pipeline_creation_cache_control",		"VkPhysicalDeviceVulkan13Features.pipelineCreationCacheControl" },			vulkan13Features.pipelineCreationCacheControl },
-		{ { "VK_EXT_private_data",							"VkPhysicalDeviceVulkan13Features.privateData" },							vulkan13Features.privateData },
-		{ { "VK_EXT_shader_demote_to_helper_invocation",	"VkPhysicalDeviceVulkan13Features.shaderDemoteToHelperInvocation" },		vulkan13Features.shaderDemoteToHelperInvocation },
-		{ { "VK_KHR_shader_terminate_invocation",			"VkPhysicalDeviceVulkan13Features.shaderTerminateInvocation" },				vulkan13Features.shaderTerminateInvocation },
-		{ { "VK_EXT_subgroup_size_control",					"VkPhysicalDeviceVulkan13Features.subgroupSizeControl" },					vulkan13Features.subgroupSizeControl },
-		{ { "VK_EXT_subgroup_size_control",					"VkPhysicalDeviceVulkan13Features.computeFullSubgroups" },					vulkan13Features.computeFullSubgroups },
-		{ { "VK_KHR_synchronization2",						"VkPhysicalDeviceVulkan13Features.synchronization2" },						vulkan13Features.synchronization2 },
-		{ { "VK_KHR_zero_initialize_workgroup_memory",		"VkPhysicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory" },	vulkan13Features.shaderZeroInitializeWorkgroupMemory },
-		{ { "VK_KHR_dynamic_rendering",						"VkPhysicalDeviceVulkan13Features.dynamicRendering" },						vulkan13Features.dynamicRendering },
-		{ { "VK_KHR_shader_integer_dot_product",			"VkPhysicalDeviceVulkan13Features.shaderIntegerDotProduct" },				vulkan13Features.shaderIntegerDotProduct },
-		{ { "VK_KHR_maintenance4",							"VkPhysicalDeviceVulkan13Features.maintenance4" },							vulkan13Features.maintenance4 },
+		{ { "VkPhysicalDeviceVulkan13Features.robustImageAccess" },										vulkan13Features.robustImageAccess },
+		{ { "VkPhysicalDeviceVulkan13Features.inlineUniformBlock" },									vulkan13Features.inlineUniformBlock },
+		{ { "VkPhysicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind" },	vulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind },
+		{ { "VkPhysicalDeviceVulkan13Features.pipelineCreationCacheControl" },							vulkan13Features.pipelineCreationCacheControl },
+		{ { "VkPhysicalDeviceVulkan13Features.privateData" },											vulkan13Features.privateData },
+		{ { "VkPhysicalDeviceVulkan13Features.shaderDemoteToHelperInvocation" },						vulkan13Features.shaderDemoteToHelperInvocation },
+		{ { "VkPhysicalDeviceVulkan13Features.shaderTerminateInvocation" },								vulkan13Features.shaderTerminateInvocation },
+		{ { "VkPhysicalDeviceVulkan13Features.subgroupSizeControl" },									vulkan13Features.subgroupSizeControl },
+		{ { "VkPhysicalDeviceVulkan13Features.computeFullSubgroups" },									vulkan13Features.computeFullSubgroups },
+		{ { "VkPhysicalDeviceVulkan13Features.synchronization2" },										vulkan13Features.synchronization2 },
+		{ { "VkPhysicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory" },					vulkan13Features.shaderZeroInitializeWorkgroupMemory },
+		{ { "VkPhysicalDeviceVulkan13Features.dynamicRendering" },										vulkan13Features.dynamicRendering },
+		{ { "VkPhysicalDeviceVulkan13Features.shaderIntegerDotProduct" },								vulkan13Features.shaderIntegerDotProduct },
+		{ { "VkPhysicalDeviceVulkan13Features.maintenance4" },											vulkan13Features.maintenance4 },
 	};
-	vector<VkExtensionProperties> extensionProperties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
-	for (const auto& ext : extensions2validate)
+	for (const auto& feature : features2validate)
 	{
-		if (!checkExtension(extensionProperties, ext.first.first))
-			TCU_FAIL(string("Mising extension ") + ext.first.first);
-		if (!ext.second)
-			TCU_FAIL(string("Required feature ") + ext.first.second + " is not set");
+		if (!feature.second)
+			TCU_FAIL(string("Required feature ") + feature.first + " is not set");
 	}
 
 	// collect all extension features
diff --git a/external/vulkancts/scripts/src/mandatory_features.txt b/external/vulkancts/scripts/src/mandatory_features.txt
index d444da8..751910e 100644
--- a/external/vulkancts/scripts/src/mandatory_features.txt
+++ b/external/vulkancts/scripts/src/mandatory_features.txt
@@ -152,3 +152,17 @@
 VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR			FEATURES ( shaderIntegerDotProduct )							REQUIREMENTS ( VK_KHR_shader_integer_dot_product )
 VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT		FEATURES ( primitiveTopologyListRestart )						REQUIREMENTS ( VK_EXT_primitive_topology_list_restart )
 VkPhysicalDeviceBorderColorSwizzleFeaturesEXT				FEATURES ( borderColorSwizzle )									REQUIREMENTS ( VK_EXT_border_color_swizzle )
+VkPhysicalDeviceVulkan13Features							FEATURES ( robustImageAccess )									REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( inlineUniformBlock )									REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( descriptorBindingInlineUniformBlockUpdateAfterBind )	REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( pipelineCreationCacheControl )						REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( privateData )										REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( shaderDemoteToHelperInvocation )						REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( shaderTerminateInvocation )							REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( subgroupSizeControl )								REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( computeFullSubgroups )								REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( synchronization2 )									REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( shaderZeroInitializeWorkgroupMemory )				REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( dynamicRendering )									REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( shaderIntegerDotProduct )							REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDeviceVulkan13Features							FEATURES ( maintenance4 )										REQUIREMENTS ( "ApiVersion(1, 3, 0)" )