Merge vk-gl-cts/vulkan-cts-1.2.1 into vk-gl-cts/vulkan-cts-1.2.2

Change-Id: I6f501d0a79d072f3c3178ceda69dff5dfa9f98a0
diff --git a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
index bfec8b2..5ae5310 100644
--- a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
+++ b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
@@ -220,9 +220,11 @@
 								CommonDescriptorInstance		(Context&									context,
 																const TestParams&							testParams);
 
-	deUint32					computeAvailableDescriptorCount	(VkDescriptorType							descriptorType) const;
+	deUint32					computeAvailableDescriptorCount	(VkDescriptorType							descriptorType,
+																 bool										reserveUniformTexelBuffer) const;
 
-	Move<VkDescriptorSetLayout>	createDescriptorSetLayout		(deUint32&									descriptorCount) const;
+	Move<VkDescriptorSetLayout>	createDescriptorSetLayout		(bool										reserveUniformTexelBuffer,
+																 deUint32&									descriptorCount) const;
 
 	Move<VkDescriptorPool>		createDescriptorPool			(deUint32									descriptorCount) const;
 
@@ -528,17 +530,19 @@
 {
 }
 
-deUint32 CommonDescriptorInstance::computeAvailableDescriptorCount	(VkDescriptorType						descriptorType) const
+deUint32 CommonDescriptorInstance::computeAvailableDescriptorCount	(VkDescriptorType						descriptorType,
+																	 bool									reserveUniformTexelBuffer) const
 {
 	DE_UNREF(descriptorType);
 	const deUint32 vertexCount = m_testParams.frameResolution.width * m_testParams.frameResolution.height;
-	const deUint32 availableDescriptorsOnDevice = ut::DeviceProperties(m_context).computeMaxPerStageDescriptorCount(m_testParams.descriptorType, m_testParams.updateAfterBind);
+	const deUint32 availableDescriptorsOnDevice = ut::DeviceProperties(m_context).computeMaxPerStageDescriptorCount(m_testParams.descriptorType, m_testParams.updateAfterBind, reserveUniformTexelBuffer);
 	return deMinu32(deMinu32(vertexCount, availableDescriptorsOnDevice), MAX_DESCRIPTORS);
 }
 
-Move<VkDescriptorSetLayout>	CommonDescriptorInstance::createDescriptorSetLayout (deUint32&					descriptorCount) const
+Move<VkDescriptorSetLayout>	CommonDescriptorInstance::createDescriptorSetLayout (bool						reserveUniformTexelBuffer,
+																				 deUint32&					descriptorCount) const
 {
-	descriptorCount = computeAvailableDescriptorCount(m_testParams.descriptorType);
+	descriptorCount = computeAvailableDescriptorCount(m_testParams.descriptorType, reserveUniformTexelBuffer);
 
 	bool optional = (m_testParams.additionalDescriptorBinding != BINDING_Undefined) && (m_testParams.additionalDescriptorType != VK_DESCRIPTOR_TYPE_UNDEFINED);
 
@@ -1187,7 +1191,7 @@
 	variables.lowerBound				= 0;
 	variables.upperBound				= variables.vertexCount;
 
-	variables.descriptorSetLayout		= createDescriptorSetLayout(variables.availableDescriptorCount);
+	variables.descriptorSetLayout		= createDescriptorSetLayout(m_testParams.calculateInLoop, variables.availableDescriptorCount);
 	variables.validDescriptorCount		= ut::computePrimeCount(variables.availableDescriptorCount);
 	variables.descriptorPool			= createDescriptorPool(variables.availableDescriptorCount);
 	variables.descriptorSet				= createDescriptorSet(*variables.descriptorPool, *variables.descriptorSetLayout);
diff --git a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp
index 00709c8..131beff 100644
--- a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp
+++ b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp
@@ -207,7 +207,8 @@
 	inline const VkPhysicalDeviceFeatures&							physicalDeviceFeatures		(void) const;
 
 	deUint32 computeMaxPerStageDescriptorCount	(VkDescriptorType	descriptorType,
-												 bool				enableUpdateAfterBind) const;
+												 bool				enableUpdateAfterBind,
+												 bool				reserveUniformTexelBuffer) const;
 };
 
 inline const VkPhysicalDeviceDescriptorIndexingFeatures& DeviceProperties::descriptorIndexingFeatures (void) const
diff --git a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp
index ca7b675..c81b845 100644
--- a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp
+++ b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp
@@ -688,7 +688,8 @@
 }
 
 deUint32 DeviceProperties::computeMaxPerStageDescriptorCount	(VkDescriptorType	descriptorType,
-																 bool				enableUpdateAfterBind) const
+																 bool				enableUpdateAfterBind,
+																 bool				reserveUniformTexelBuffer) const
 {
 	const VkPhysicalDeviceDescriptorIndexingProperties&		descriptorProps = descriptorIndexingProperties();
 	const VkPhysicalDeviceProperties&						deviceProps = physicalDeviceProperties();
@@ -703,7 +704,11 @@
 	deUint32		storageImages			= 0;
 	deUint32		inputAttachments		= 0;
 	deUint32		inlineUniforms			= 0;
-	const deUint32	resources				= deviceProps.limits.maxPerStageResources;
+
+	// in_loop tests use an additional single texel buffer, which is calculated against the limits below
+	const deUint32	reservedCount			= (reserveUniformTexelBuffer ? 1u : 0u);
+
+	const deUint32	resources				= deviceProps.limits.maxPerStageResources - reservedCount;
 
 	if (enableUpdateAfterBind)
 	{
@@ -718,14 +723,14 @@
 	}
 	else
 	{
-		samplers				= deMinu32(	deviceProps.limits.maxPerStageDescriptorSamplers,						deviceProps.limits.maxDescriptorSetSamplers);				// 1048576
-		uniformBuffers			= deMinu32(	deviceProps.limits.maxPerStageDescriptorUniformBuffers,					deviceProps.limits.maxDescriptorSetUniformBuffers);			// 15
-		uniformBuffersDynamic	= deMinu32(	deviceProps.limits.maxPerStageDescriptorUniformBuffers,					deviceProps.limits.maxDescriptorSetUniformBuffersDynamic);	// 8
-		storageBuffers			= deMinu32(	deviceProps.limits.maxPerStageDescriptorStorageBuffers,					deviceProps.limits.maxDescriptorSetStorageBuffers);			// 1048576
-		storageBuffersDynamic	= deMinu32(	deviceProps.limits.maxPerStageDescriptorStorageBuffers,					deviceProps.limits.maxDescriptorSetStorageBuffersDynamic);	// 8
-		sampledImages			= deMinu32(	deviceProps.limits.maxPerStageDescriptorSampledImages-1,				deviceProps.limits.maxDescriptorSetSampledImages-1);		// 1048576. -1 because during in_loop tests a single texel buffer is created and is calculated against this limit
-		storageImages			= deMinu32(	deviceProps.limits.maxPerStageDescriptorStorageImages,					deviceProps.limits.maxDescriptorSetStorageImages);			// 1048576
-		inputAttachments		= deMinu32(	deviceProps.limits.maxPerStageDescriptorInputAttachments,				deviceProps.limits.maxDescriptorSetInputAttachments);		// 1048576
+		samplers				= deMinu32(	deviceProps.limits.maxPerStageDescriptorSamplers,						deviceProps.limits.maxDescriptorSetSamplers);							// 1048576
+		uniformBuffers			= deMinu32(	deviceProps.limits.maxPerStageDescriptorUniformBuffers,					deviceProps.limits.maxDescriptorSetUniformBuffers);						// 15
+		uniformBuffersDynamic	= deMinu32(	deviceProps.limits.maxPerStageDescriptorUniformBuffers,					deviceProps.limits.maxDescriptorSetUniformBuffersDynamic);				// 8
+		storageBuffers			= deMinu32(	deviceProps.limits.maxPerStageDescriptorStorageBuffers,					deviceProps.limits.maxDescriptorSetStorageBuffers);						// 1048576
+		storageBuffersDynamic	= deMinu32(	deviceProps.limits.maxPerStageDescriptorStorageBuffers,					deviceProps.limits.maxDescriptorSetStorageBuffersDynamic);				// 8
+		sampledImages			= deMinu32(	deviceProps.limits.maxPerStageDescriptorSampledImages - reservedCount,	deviceProps.limits.maxDescriptorSetSampledImages - reservedCount);		// 1048576.
+		storageImages			= deMinu32(	deviceProps.limits.maxPerStageDescriptorStorageImages,					deviceProps.limits.maxDescriptorSetStorageImages);						// 1048576
+		inputAttachments		= deMinu32(	deviceProps.limits.maxPerStageDescriptorInputAttachments,				deviceProps.limits.maxDescriptorSetInputAttachments);					// 1048576
 	}
 
 	// adding arbitrary upper bound limits to restrain the size of the test ( we are testing big arrays, not the maximum size arrays )