diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instruction-simplify-atanh-log-undefined.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instruction-simplify-atanh-log-undefined.amber
index 52fe7d5..267b7ff 100644
--- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instruction-simplify-atanh-log-undefined.amber
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instruction-simplify-atanh-log-undefined.amber
@@ -56,6 +56,7 @@
 #         _GLF_color.g = _float_0_0;
 #     }
 # }
+DEVICE_EXTENSION VK_KHR_shader_float_controls
 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
 ; SPIR-V
 ; Version: 1.0
@@ -63,10 +64,13 @@
 ; Bound: 57
 ; Schema: 0
                OpCapability Shader
+               OpCapability SignedZeroInfNanPreserve
+               OpExtension "SPV_KHR_float_controls"
           %1 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Fragment %4 "main" %9
                OpExecutionMode %4 OriginUpperLeft
+               OpExecutionMode %4 SignedZeroInfNanPreserve 32
                OpSource ESSL 310
                OpName %4 "main"
                OpName %9 "_GLF_color"
diff --git a/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp b/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp
index fd6a767..e5baf0e 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp
@@ -87,9 +87,7 @@
 		log << tcu::TestLog::Message << "deviceVersion: " << deviceVersion << tcu::TestLog::EndMessage;
 		log << tcu::TestLog::Message << "usedApiVersion: " << usedApiVersion << tcu::TestLog::EndMessage;
 
-		if (instanceVersion.majorNum > maxVulkanVersion.majorNum || instanceVersion.minorNum > maxVulkanVersion.minorNum)
-			return tcu::TestStatus::fail(de::toString("This version of CTS does not support a Vulkan instance with version ") + instanceVersionString);
-		else if (deviceVersion.majorNum > maxVulkanVersion.majorNum || deviceVersion.minorNum > maxVulkanVersion.minorNum)
+		if (deviceVersion.majorNum > maxVulkanVersion.majorNum || deviceVersion.minorNum > maxVulkanVersion.minorNum)
 			return tcu::TestStatus::fail(de::toString("This version of CTS does not support Vulkan device version ") + deviceVersionString);
 		else
 			return tcu::TestStatus::pass(usedApiVersionString);
diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
index 5d0963f..d1b1bd4 100644
--- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
+++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
@@ -317,7 +317,6 @@
 			// Determine the maximum memory heap space available for protected images
 			vk::VkPhysicalDeviceMemoryProperties	memoryProperties	= vk::getPhysicalDeviceMemoryProperties(context.getInstanceDriver(), context.getPhysicalDevice());
 			vk::VkDeviceSize						protectedHeapSize	= 0;
-			vk::VkDeviceSize						maxMemoryUsage		= 0;
 			deUint32								protectedHeapMask	= 0;
 
 			for (deUint32 memType = 0; memType < memoryProperties.memoryTypeCount; memType++)
@@ -330,15 +329,14 @@
 					(protectedHeapMask & (1u << heapIndex)) == 0)
 				{
 					protectedHeapSize = de::max(protectedHeapSize, memoryProperties.memoryHeaps[heapIndex].size);
-					maxMemoryUsage    = protectedHeapSize / 4 ; /* Use at maximum 25% of heap */
 					protectedHeapMask |= 1u << heapIndex;
 				}
 			}
 
 			// If the implementation doesn't have a max image count, min+16 means we won't clamp.
-			// Limit it to how many protected images we estimate can be allocated - 25% of heap size
+			// Limit it to how many protected images we estimate can be allocated
 			const deUint32	maxImageCount		= de::min((capabilities.maxImageCount > 0) ? capabilities.maxImageCount : capabilities.minImageCount + 16u,
-														  deUint32(maxMemoryUsage / memoryRequirements.size));
+														  deUint32(protectedHeapSize / memoryRequirements.size));
 			if (maxImageCount < capabilities.minImageCount)
 				TCU_THROW(NotSupportedError, "Memory heap doesn't have enough memory!.");
 
@@ -358,7 +356,6 @@
 			vk::VkDevice							device				= context.getDevice();
 			vk::VkPhysicalDeviceMemoryProperties	memoryProperties	= vk::getPhysicalDeviceMemoryProperties(context.getInstanceDriver(), context.getPhysicalDevice());
 			vk::VkDeviceSize						protectedHeapSize	= 0;
-			vk::VkDeviceSize						maxMemoryUsage		= 0;
 
 			for (deUint32 memType = 0; memType < memoryProperties.memoryTypeCount; memType++)
 			{
@@ -368,7 +365,6 @@
 #endif
 				{
 					protectedHeapSize = de::max(protectedHeapSize, memoryProperties.memoryHeaps[heapIndex].size);
-					maxMemoryUsage	  = protectedHeapSize / 4 ; /* Use at maximum 25% of heap */
 				}
 			}
 
@@ -407,7 +403,7 @@
 					}
 
 					// Check for the image size requirement based on double/triple buffering
-					if (memoryRequirements.size  * capabilities.minImageCount < maxMemoryUsage)
+					if (memoryRequirements.size  * capabilities.minImageCount < protectedHeapSize)
 					{
 						cases.push_back(baseParameters);
 						cases.back().imageFormat		= curFmt->format;
@@ -433,7 +429,6 @@
 			vk::VkDevice							device				= context.getDevice();
 			vk::VkPhysicalDeviceMemoryProperties	memoryProperties	= vk::getPhysicalDeviceMemoryProperties(context.getInstanceDriver(), context.getPhysicalDevice());
 			vk::VkDeviceSize						protectedHeapSize	= 0;
-			vk::VkDeviceSize						maxMemoryUsage		= 0;
 
 			for (deUint32 memType = 0; memType < memoryProperties.memoryTypeCount; memType++)
 			{
@@ -443,7 +438,6 @@
 #endif
 				{
 					protectedHeapSize = de::max(protectedHeapSize, memoryProperties.memoryHeaps[heapIndex].size);
-					maxMemoryUsage    = protectedHeapSize / 4 ; /* Use at maximum 25% of heap */
 				}
 			}
 
@@ -483,7 +477,7 @@
 					}
 
 					// Check for the image size requirement based on double/triple buffering
-					if (memoryRequirements.size  * capabilities.minImageCount < maxMemoryUsage)
+					if (memoryRequirements.size  * capabilities.minImageCount < protectedHeapSize)
 					{
 						cases.push_back(baseParameters);
 						cases.back().imageExtent.width	= de::clamp(s_testSizes[ndx].width, capabilities.minImageExtent.width, capabilities.maxImageExtent.width);
@@ -525,7 +519,7 @@
 				}
 
 				// Check for the image size requirement based on double/triple buffering
-				if (memoryRequirements.size  * capabilities.minImageCount < maxMemoryUsage)
+				if (memoryRequirements.size  * capabilities.minImageCount < protectedHeapSize)
 				{
 					cases.push_back(baseParameters);
 					cases.back().imageExtent = capabilities.currentExtent;
@@ -573,7 +567,7 @@
 					}
 
 					// Check for the image size requirement based on double/triple buffering
-					if (memoryRequirements.size  * capabilities.minImageCount < maxMemoryUsage)
+					if (memoryRequirements.size  * capabilities.minImageCount < protectedHeapSize)
 					{
 						cases.push_back(baseParameters);
 						cases.back().imageExtent =s_testExtentSizes[ndx];
