Merge vk-gl-cts/vulkan-cts-1.2.8 into vk-gl-cts/vulkan-cts-1.3.0

Change-Id: I70f2eff0aee69bc3ed882d1ad4f6fc9ffb4b10b6
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 00dcc13..6d940b3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -282,7 +282,7 @@
 	if (NOT DE_OS_IS_ANDROID AND NOT DE_OS_IS_IOS)
 		# Executable target
 		add_executable(${MODULE_NAME} ${PROJECT_SOURCE_DIR}/framework/platform/tcuMain.cpp ${ENTRY})
-		target_link_libraries(${MODULE_NAME} tcutil-platform "${MODULE_NAME}${MODULE_LIB_TARGET_POSTFIX}")
+		target_link_libraries(${MODULE_NAME} PUBLIC tcutil-platform "${MODULE_NAME}${MODULE_LIB_TARGET_POSTFIX}")
 		target_copy_files(${MODULE_NAME} platform-libs-${MODULE_NAME} "${DEQP_PLATFORM_COPY_LIBRARIES}")
 	endif ()
 
diff --git a/external/vulkancts/modules/vulkan/api/vktApiBufferTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiBufferTests.cpp
index b9f1781..424ef41 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiBufferTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiBufferTests.cpp
@@ -667,14 +667,19 @@
 
 tcu::TestStatus testLargeBuffer(Context& context, LargeBufferParameters params)
 {
-	const DeviceInterface&	vk					= context.getDeviceInterface();
-	const VkDevice			vkDevice			= context.getDevice();
-	const deUint32			queueFamilyIndex	= context.getUniversalQueueFamilyIndex();
-	VkBuffer				rawBuffer			= DE_NULL;
+	const DeviceInterface&			vk					= context.getDeviceInterface();
+	const VkDevice					vkDevice			= context.getDevice();
+	const deUint32					queueFamilyIndex	= context.getUniversalQueueFamilyIndex();
+	const VkPhysicalDeviceLimits	limits				= getPhysicalDeviceProperties(context.getInstanceInterface(),
+				                                                                      context.getPhysicalDevice()).limits;
+	VkBuffer						rawBuffer			= DE_NULL;
 
 	if (params.useMaxBufferSize)
 		params.bufferSize = context.getMaintenance4Properties().maxBufferSize;
 
+	if ((params.flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) != 0)
+		params.bufferSize = std::min(params.bufferSize, limits.sparseAddressSpaceSize);
+
 	VkBufferCreateInfo bufferParams =
 	{
 		VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,	// VkStructureType			sType;
diff --git a/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
index be26400..ea6d18e 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
@@ -2644,7 +2644,6 @@
 		&secBufferInheritInfo,
 	};
 
-	// Create an occlusion query with VK_QUERY_CONTROL_PRECISE_BIT set
 	const VkQueryPoolCreateInfo				queryPoolCreateInfo		=
 	{
 		VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,					// sType
@@ -2662,7 +2661,7 @@
 	VK_CHECK(vk.beginCommandBuffer(primCmdBuf.get(), &primBufferBeginInfo));
 	{
 		vk.cmdResetQueryPool(primCmdBuf.get(), queryPool.get(), 0u, 1u);
-		vk.cmdBeginQuery(primCmdBuf.get(), queryPool.get(), 0u, VK_QUERY_CONTROL_PRECISE_BIT);
+		vk.cmdBeginQuery(primCmdBuf.get(), queryPool.get(), 0u, 0u);
 		{
 			vk.cmdExecuteCommands(primCmdBuf.get(), 1u, &secCmdBuf.get());
 		}
@@ -2670,7 +2669,7 @@
 	}
 	endCommandBuffer(vk, primCmdBuf.get());
 
-	return tcu::TestStatus::pass("Successfully recorded a secondary command buffer allowing a precise occlusion query.");
+	return tcu::TestStatus::pass("Successfully recorded an imprecise query with a secondary command buffer allowing a precise occlusion query.");
 }
 
 tcu::TestStatus recordBufferQueryImpreciseWithoutFlagTest(Context& context)
@@ -2740,7 +2739,6 @@
 		&secBufferInheritInfo,
 	};
 
-	// Create an occlusion query with VK_QUERY_CONTROL_PRECISE_BIT set
 	const VkQueryPoolCreateInfo				queryPoolCreateInfo		=
 	{
 		VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,					// sType
@@ -2758,7 +2756,7 @@
 	VK_CHECK(vk.beginCommandBuffer(primCmdBuf.get(), &primBufferBeginInfo));
 	{
 		vk.cmdResetQueryPool(primCmdBuf.get(), queryPool.get(), 0u, 1u);
-		vk.cmdBeginQuery(primCmdBuf.get(), queryPool.get(), 0u, VK_QUERY_CONTROL_PRECISE_BIT);
+		vk.cmdBeginQuery(primCmdBuf.get(), queryPool.get(), 0u, 0u);
 		{
 			vk.cmdExecuteCommands(primCmdBuf.get(), 1u, &secCmdBuf.get());
 		}
@@ -2766,7 +2764,7 @@
 	}
 	endCommandBuffer(vk, primCmdBuf.get());
 
-	return tcu::TestStatus::pass("Successfully recorded a secondary command buffer allowing a precise occlusion query.");
+	return tcu::TestStatus::pass("Successfully recorded an imprecise query with a secondary command buffer not allowing a precise occlusion query.");
 }
 
 /******** 19.4. Command Buffer Submission (5.4 in VK 1.0 Spec) ****************/
diff --git a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
index 0270c29..4fce063 100644
--- a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
+++ b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
@@ -554,20 +554,23 @@
 
 	bool optional = (m_testParams.additionalDescriptorBinding != BINDING_Undefined) && (m_testParams.additionalDescriptorType != VK_DESCRIPTOR_TYPE_UNDEFINED);
 
+	const VkShaderStageFlags bindingStageFlags = (m_testParams.descriptorType == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT) ?
+													VkShaderStageFlags{VK_SHADER_STAGE_FRAGMENT_BIT} : m_testParams.stageFlags;
+
 	const VkDescriptorSetLayoutBinding	bindings[] =
 	{
 		{
 			m_testParams.descriptorBinding,				// binding
 			m_testParams.descriptorType,				// descriptorType
 			descriptorCount,							// descriptorCount
-			m_testParams.stageFlags,					// stageFlags
+			bindingStageFlags,							// stageFlags
 			DE_NULL,									// pImmutableSamplers
 		},
 		{
 			m_testParams.additionalDescriptorBinding,	// binding
 			m_testParams.additionalDescriptorType,		// descriptorType
 			1,											// descriptorCount
-			m_testParams.stageFlags,					// stageFlags
+			bindingStageFlags,							// stageFlags
 			DE_NULL,									// pImmutableSamplers
 		}
 	};
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp
index 1fe7c8e..6038031 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp
@@ -32,6 +32,7 @@
 #include "tcuVectorUtil.hpp"
 #include "deSharedPtr.hpp"
 
+#include <cmath>
 #include <memory>
 
 namespace vkt
@@ -62,6 +63,7 @@
 	virtual tcu::TestStatus	iterate						(void) override;
 
 protected:
+	tcu::IVec4				computeColorDistance		() const;
 	bool					verifyPixels				(const tcu::PixelBufferAccess&	rendered,
 														 const tcu::PixelBufferAccess&	reference,
 														 const ReferenceParams&			samplerParams,
@@ -78,6 +80,7 @@
 	tcu::Texture2D				m_swTexture;
 	TextureRenderer				m_renderer;
 
+	const tcu::IVec4			m_cd;
 	const tcu::IVec4			m_a;
 	const tcu::IVec4			m_b;
 	const tcu::IVec4			m_c;
@@ -96,10 +99,11 @@
 	, m_hwTexture	(TestTexture2DSp(new pipeline::TestTexture2D(m_inFormat, textureWidth, textureHeight)))
 	, m_swTexture	(m_inFormat, textureWidth, textureHeight, 1)
 	, m_renderer	(context, VK_SAMPLE_COUNT_1_BIT, m_params->width, m_params->height, 1u, makeComponentMappingRGBA(), VK_IMAGE_TYPE_2D, VK_IMAGE_VIEW_TYPE_2D, m_outFormat)
-	, m_a			(lim(m_inFormat, 0),	lim(m_inFormat, 1)+2,	lim(m_inFormat, 2),		lim(m_inFormat, 3)+2)
-	, m_b			(lim(m_inFormat, 0)+2,	lim(m_inFormat, 1),		lim(m_inFormat, 2)+2,	lim(m_inFormat, 3)	)
-	, m_c			(lim(m_inFormat, 0)+1,	lim(m_inFormat, 1)+1,	lim(m_inFormat, 2)+1,	lim(m_inFormat, 3)+1)
-	, m_d			(lim(m_inFormat, 0),	lim(m_inFormat, 1),		lim(m_inFormat, 2),		lim(m_inFormat, 3)	)
+	, m_cd			(computeColorDistance())
+	, m_a			(lim(m_inFormat, 0),			lim(m_inFormat, 1)+m_cd[1]*2,	lim(m_inFormat, 2),				lim(m_inFormat, 3)+m_cd[3]*2)
+	, m_b			(lim(m_inFormat, 0)+m_cd[0]*2,	lim(m_inFormat, 1),				lim(m_inFormat, 2)+m_cd[2]*2,	lim(m_inFormat, 3)			)
+	, m_c			(lim(m_inFormat, 0)+m_cd[0]*1,	lim(m_inFormat, 1)+m_cd[1]*1,	lim(m_inFormat, 2)+m_cd[2]*1,	lim(m_inFormat, 3)+m_cd[3]*1)
+	, m_d			(lim(m_inFormat, 0),			lim(m_inFormat, 1),				lim(m_inFormat, 2),				lim(m_inFormat, 3)			)
 {
 	tcu::IVec4 data[textureWidth * textureHeight] =
 	{
@@ -135,6 +139,17 @@
 	return channelBits[channelIdx] ? (-deIntMaxValue32(channelBits[channelIdx])) : (-1);
 }
 
+tcu::IVec4 SnormLinearClampInstance::computeColorDistance () const
+{
+	return tcu::IVec4
+	(
+		static_cast<int>(std::floor(static_cast<float>(-lim(m_inFormat, 0)) / 127.0f)),
+		static_cast<int>(std::floor(static_cast<float>(-lim(m_inFormat, 0)) / 127.0f)),
+		static_cast<int>(std::floor(static_cast<float>(-lim(m_inFormat, 0)) / 127.0f)),
+		static_cast<int>(std::floor(static_cast<float>(-lim(m_inFormat, 0)) / 127.0f))
+	);
+}
+
 bool SnormLinearClampInstance::verifyPixels	(const tcu::PixelBufferAccess& rendered, const tcu::PixelBufferAccess& reference, const ReferenceParams& samplerParams, const std::vector<float>& texCoords) const
 {
 	tcu::LodPrecision				lodPrec;
@@ -144,6 +159,7 @@
 	const int						width			(m_renderer.getRenderWidth());
 	const int						height			(m_renderer.getRenderHeight());
 
+	const tcu::IVec4				colorDistance	(computeColorDistance());
 	std::unique_ptr<deUint8[]>		errorMaskData	(new deUint8[width * height * 4 * 4]);
 	tcu::PixelBufferAccess			errorMask		(mapVkFormat(m_outFormat), width, height, 1, errorMaskData.get());
 
@@ -154,10 +170,10 @@
 	lookupPrec.uvwBits				= tcu::IVec3(5,5,0);
 	lookupPrec.coordBits			= tcu::IVec3(20,20,0);
 	lookupPrec.colorMask			= tcu::BVec4(nuc >= 1, nuc >= 2, nuc >=3, nuc >= 4);
-	lookupPrec.colorThreshold		= tcu::Vec4(0.9f/float(-lim(m_inFormat, 0)),
-												0.9f/float(-lim(m_inFormat, 1)),
-												0.9f/float(-lim(m_inFormat, 2)),
-												0.9f/float(-lim(m_inFormat, 3)));
+	lookupPrec.colorThreshold		= tcu::Vec4(0.9f/float(colorDistance[0]),
+												0.9f/float(colorDistance[1]),
+												0.9f/float(colorDistance[2]),
+												0.9f/float(colorDistance[3]));
 
 	const int numFailedPixels		= glu::TextureTestUtil::computeTextureLookupDiff(rendered, reference, errorMask,
 																					 m_swTexture, texCoords.data(), samplerParams,