Merge vulkan-cts-1.0.2 into aosp/master

Contains following fixes that have been made after vulkan-cts-1.0.2.2:

 * Fix - uniform buffer incorrectly dereferenced
 * Use vkGetInstanceProcAddr(NULL) to load platform funcs
 * Imgtec Waiver for texture_gather*cube*depth32f*
 * Add VK_KHR_incremental_present to the list of allowed device
extensions
 * Use -std=c++03 with GCC and clang
 * Fix GCC 6.3 warnings in vulkan-cts-1.0.2
 * Improve check_build_sanity.py
 * Relax image verification in anisotropic filtering tests
 * Respect maxColorAttachments in image tests
 * Fix SPIR-V generation in dEQP-VK.spirv_assembly
 * Fix - depth/stencil images mandatory only for VK_IMAGE_TYPE_2D
 * Add missing barrier in ssbo layout tests

This merge doesn't match any Vulkan CTS release tag.

Bug: 36899783
Bug: 36817508
Change-Id: I5dff02835e5296e1c25ba67675c06e2261e5c476
diff --git a/execserver/tools/xsClient.cpp b/execserver/tools/xsClient.cpp
index e680fc9..49987b7 100644
--- a/execserver/tools/xsClient.cpp
+++ b/execserver/tools/xsClient.cpp
@@ -24,6 +24,7 @@
 #include "xsDefs.hpp"
 #include "xsProtocol.hpp"
 #include "deSocket.hpp"
+#include "deUniquePtr.hpp"
 
 #include "deString.h"
 
@@ -39,7 +40,7 @@
 namespace xs
 {
 
-typedef std::auto_ptr<Message> ScopedMsgPtr;
+typedef de::UniquePtr<Message> ScopedMsgPtr;
 
 class SocketError : public Error
 {
diff --git a/execserver/tools/xsTest.cpp b/execserver/tools/xsTest.cpp
index 5e47377..44483dc 100644
--- a/execserver/tools/xsTest.cpp
+++ b/execserver/tools/xsTest.cpp
@@ -30,6 +30,7 @@
 #include "deBlockBuffer.hpp"
 #include "deThread.hpp"
 #include "deStringUtil.hpp"
+#include "deUniquePtr.hpp"
 
 #include "deClock.h"
 #include "deProcess.h"
@@ -45,7 +46,7 @@
 namespace xs
 {
 
-typedef std::auto_ptr<Message> ScopedMsgPtr;
+typedef de::UniquePtr<Message> ScopedMsgPtr;
 
 class SocketError : public Error
 {
diff --git a/executor/tools/xeCommandLineExecutor.cpp b/executor/tools/xeCommandLineExecutor.cpp
index 2a9af61..d14a1aa 100644
--- a/executor/tools/xeCommandLineExecutor.cpp
+++ b/executor/tools/xeCommandLineExecutor.cpp
@@ -31,6 +31,7 @@
 #include "deCommandLine.hpp"
 #include "deDirectoryIterator.hpp"
 #include "deStringUtil.hpp"
+#include "deUniquePtr.hpp"
 
 #include "deString.h"
 
@@ -604,7 +605,7 @@
 		readLogFile(&batchResult, cmdLine.inFile.c_str());
 
 	// Initialize commLink.
-	std::auto_ptr<xe::CommLink> commLink(createCommLink(cmdLine));
+	de::UniquePtr<xe::CommLink> commLink(createCommLink(cmdLine));
 
 	xe::BatchExecutor executor(cmdLine.targetCfg, commLink.get(), &root, testSet, &batchResult, &infoLog);
 
diff --git a/external/vulkancts/framework/vulkan/vkInitPlatformFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkInitPlatformFunctionPointers.inl
index 480eaac..ab4c820 100644
--- a/external/vulkancts/framework/vulkan/vkInitPlatformFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkInitPlatformFunctionPointers.inl
@@ -2,6 +2,5 @@
  * be lost! Modify the generating script instead.
  */
 m_vk.createInstance							= (CreateInstanceFunc)							GET_PROC_ADDR("vkCreateInstance");
-m_vk.getInstanceProcAddr					= (GetInstanceProcAddrFunc)						GET_PROC_ADDR("vkGetInstanceProcAddr");
 m_vk.enumerateInstanceExtensionProperties	= (EnumerateInstanceExtensionPropertiesFunc)	GET_PROC_ADDR("vkEnumerateInstanceExtensionProperties");
 m_vk.enumerateInstanceLayerProperties		= (EnumerateInstanceLayerPropertiesFunc)		GET_PROC_ADDR("vkEnumerateInstanceLayerProperties");
diff --git a/external/vulkancts/framework/vulkan/vkPlatform.cpp b/external/vulkancts/framework/vulkan/vkPlatform.cpp
index 9f4722c..f8beab8 100644
--- a/external/vulkancts/framework/vulkan/vkPlatform.cpp
+++ b/external/vulkancts/framework/vulkan/vkPlatform.cpp
@@ -29,7 +29,9 @@
 
 PlatformDriver::PlatformDriver (const tcu::FunctionLibrary& library)
 {
-#define GET_PROC_ADDR(NAME) library.getFunction(NAME)
+	m_vk.getInstanceProcAddr	= (GetInstanceProcAddrFunc)library.getFunction("vkGetInstanceProcAddr");
+
+#define GET_PROC_ADDR(NAME) m_vk.getInstanceProcAddr(DE_NULL, NAME)
 #include "vkInitPlatformFunctionPointers.inl"
 #undef GET_PROC_ADDR
 }
diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
index 7249343..05efbad 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
@@ -472,14 +472,14 @@
 		}
 	}
 
-	if (limits->viewportBoundsRange[0] > -2 * limits->maxViewportDimensions[0])
+	if (limits->viewportBoundsRange[0] > float(-2 * limits->maxViewportDimensions[0]))
 	{
 		log << TestLog::Message << "limit validation failed, viewPortBoundsRange[0] of " << limits->viewportBoundsRange[0]
 			<< "is larger than -2*maxViewportDimension[0] of " << -2*limits->maxViewportDimensions[0] << TestLog::EndMessage;
 		limitsOk = false;
 	}
 
-	if (limits->viewportBoundsRange[1] < 2 * limits->maxViewportDimensions[1] - 1)
+	if (limits->viewportBoundsRange[1] < float(2 * limits->maxViewportDimensions[1] - 1))
 	{
 		log << TestLog::Message << "limit validation failed, viewportBoundsRange[1] of " << limits->viewportBoundsRange[1]
 			<< "is less than 2*maxViewportDimension[1] of " << 2*limits->maxViewportDimensions[1] << TestLog::EndMessage;
@@ -673,6 +673,7 @@
 		"VK_KHR_maintenance1",
 		"VK_KHR_push_descriptor",
 		"VK_KHR_descriptor_update_template",
+		"VK_KHR_incremental_present",
 	};
 
 	checkKhrExtensions(results, extensions, DE_LENGTH_OF_ARRAY(s_allowedDeviceKhrExtensions), s_allowedDeviceKhrExtensions);
@@ -1889,6 +1890,10 @@
 	if (isCompressedFormat(format) && (imageType == VK_IMAGE_TYPE_1D || imageType == VK_IMAGE_TYPE_3D))
 		return false;
 
+	// Support for 1D and 3D depth/stencil textures is optional
+	if (isDepthStencilFormat(format) && (imageType == VK_IMAGE_TYPE_1D || imageType == VK_IMAGE_TYPE_3D))
+		return false;
+
 	DE_ASSERT(deviceFeatures.sparseBinding || (createFlags & (VK_IMAGE_CREATE_SPARSE_BINDING_BIT|VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)) == 0);
 	DE_ASSERT(deviceFeatures.sparseResidencyAliased || (createFlags & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT) == 0);
 
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
index 310910a..6ea4ac6 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
@@ -160,6 +160,9 @@
 	if (!isSupportedSamplableFormat(context.getInstanceInterface(), context.getPhysicalDevice(), imageFormat))
 		throw tcu::NotSupportedError(std::string("Unsupported format for sampling: ") + getFormatName(imageFormat));
 
+	if ((deUint32)imageCount > context.getDeviceProperties().limits.maxColorAttachments)
+		throw tcu::NotSupportedError(std::string("Unsupported render target count: ") + de::toString(imageCount));
+
 	if ((samplerParams.minFilter == VK_FILTER_LINEAR ||
 		 samplerParams.magFilter == VK_FILTER_LINEAR ||
 		 samplerParams.mipmapMode == VK_SAMPLER_MIPMAP_MODE_LINEAR) &&
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinPrecisionTests.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinPrecisionTests.cpp
index dc335b5..22106d7 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinPrecisionTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinPrecisionTests.cpp
@@ -1064,10 +1064,10 @@
 template <typename T0 = Void, typename T1 = Void, typename T2 = Void, typename T3 = Void>
 struct Tuple4
 {
-	explicit Tuple4 (const T0& e0 = T0(),
-					 const T1& e1 = T1(),
-					 const T2& e2 = T2(),
-					 const T3& e3 = T3())
+	explicit Tuple4 (const T0 e0 = T0(),
+					 const T1 e1 = T1(),
+					 const T2 e2 = T2(),
+					 const T3 e3 = T3())
 		: a	(e0)
 		, b	(e1)
 		, c	(e2)
diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderIndexingTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderIndexingTests.cpp
index 1195a37..a3e65f0 100644
--- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderIndexingTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderIndexingTests.cpp
@@ -205,7 +205,7 @@
 		else
 			throw tcu::TestError("invalid data type for u_arr");
 
-			instance.addUniform(5u, vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, sizeof(Vec4) * 4, arr[0].getPtr());
+		instance.addUniform(5u, vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, sizeof(Vec4) * 4, arr[0].getPtr());
 	}
 }
 
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
index 23003e5..f828de8 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
@@ -2318,10 +2318,18 @@
 
 		"OpDecorate %id BuiltIn GlobalInvocationId\n"
 
-		+ string(s_InputOutputBufferTraits) + string(s_CommonTypes) + string(s_InputOutputBuffer) +
+		+ string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
+		"%uvec2     = OpTypeVector %u32 2\n"
+		"%bvec3     = OpTypeVector %bool 3\n"
+		"%fvec4     = OpTypeVector %f32 4\n"
+		"%fmat33    = OpTypeMatrix %fvec3 3\n"
+		"%const100  = OpConstant %u32 100\n"
+		"%uarr100   = OpTypeArray %i32 %const100\n"
+		"%struct    = OpTypeStruct %f32 %i32 %u32\n"
+		"%pointer   = OpTypePointer Function %i32\n"
+		+ string(s_InputOutputBuffer) +
 
-		"${TYPE}\n"
-		"%null      = OpConstantNull %type\n"
+		"%null      = OpConstantNull ${TYPE}\n"
 
 		"%id        = OpVariable %uvec3ptr Input\n"
 		"%zero      = OpConstant %i32 0\n"
@@ -2338,18 +2346,17 @@
 		"             OpReturn\n"
 		"             OpFunctionEnd\n");
 
-	cases.push_back(CaseParameter("bool",			"%type = OpTypeBool"));
-	cases.push_back(CaseParameter("sint32",			"%type = OpTypeInt 32 1"));
-	cases.push_back(CaseParameter("uint32",			"%type = OpTypeInt 32 0"));
-	cases.push_back(CaseParameter("float32",		"%type = OpTypeFloat 32"));
-	cases.push_back(CaseParameter("vec4float32",	"%type = OpTypeVector %f32 4"));
-	cases.push_back(CaseParameter("vec3bool",		"%type = OpTypeVector %bool 3"));
-	cases.push_back(CaseParameter("vec2uint32",		"%type = OpTypeVector %u32 2"));
-	cases.push_back(CaseParameter("matrix",			"%type = OpTypeMatrix %fvec3 3"));
-	cases.push_back(CaseParameter("array",			"%100 = OpConstant %u32 100\n"
-													"%type = OpTypeArray %i32 %100"));
-	cases.push_back(CaseParameter("struct",			"%type = OpTypeStruct %f32 %i32 %u32"));
-	cases.push_back(CaseParameter("pointer",		"%type = OpTypePointer Function %i32"));
+	cases.push_back(CaseParameter("bool",			"%bool"));
+	cases.push_back(CaseParameter("sint32",			"%i32"));
+	cases.push_back(CaseParameter("uint32",			"%u32"));
+	cases.push_back(CaseParameter("float32",		"%f32"));
+	cases.push_back(CaseParameter("vec4float32",	"%fvec4"));
+	cases.push_back(CaseParameter("vec3bool",		"%bvec3"));
+	cases.push_back(CaseParameter("vec2uint32",		"%uvec2"));
+	cases.push_back(CaseParameter("matrix",			"%fmat33"));
+	cases.push_back(CaseParameter("array",			"%uarr100"));
+	cases.push_back(CaseParameter("struct",			"%struct"));
+	cases.push_back(CaseParameter("pointer",		"%pointer"));
 
 	fillRandomScalars(rnd, 1.f, 100.f, &positiveFloats[0], numElements);
 
@@ -3416,17 +3423,25 @@
 
 		"OpDecorate %id BuiltIn GlobalInvocationId\n"
 
-		+ string(s_InputOutputBufferTraits) + string(s_CommonTypes) + string(s_InputOutputBuffer) +
-
-		"${TYPE}\n"
-
+		+ string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
+		"%uvec2     = OpTypeVector %u32 2\n"
+		"%fvec4     = OpTypeVector %f32 4\n"
+		"%fmat33    = OpTypeMatrix %fvec3 3\n"
+		"%image     = OpTypeImage %f32 2D 0 0 0 1 Unknown\n"
+		"%sampler   = OpTypeSampler\n"
+		"%simage    = OpTypeSampledImage %image\n"
+		"%const100  = OpConstant %u32 100\n"
+		"%uarr100   = OpTypeArray %i32 %const100\n"
+		"%struct    = OpTypeStruct %f32 %i32 %u32\n"
+		"%pointer   = OpTypePointer Function %i32\n"
+		+ string(s_InputOutputBuffer) +
 		"%id        = OpVariable %uvec3ptr Input\n"
 		"%zero      = OpConstant %i32 0\n"
 
 		"%main      = OpFunction %void None %voidf\n"
 		"%label     = OpLabel\n"
 
-		"%undef     = OpUndef %type\n"
+		"%undef     = OpUndef ${TYPE}\n"
 
 		"%idval     = OpLoad %uvec3 %id\n"
 		"%x         = OpCompositeExtract %u32 %idval 0\n"
@@ -3439,22 +3454,20 @@
 		"             OpReturn\n"
 		"             OpFunctionEnd\n");
 
-	cases.push_back(CaseParameter("bool",			"%type = OpTypeBool"));
-	cases.push_back(CaseParameter("sint32",			"%type = OpTypeInt 32 1"));
-	cases.push_back(CaseParameter("uint32",			"%type = OpTypeInt 32 0"));
-	cases.push_back(CaseParameter("float32",		"%type = OpTypeFloat 32"));
-	cases.push_back(CaseParameter("vec4float32",	"%type = OpTypeVector %f32 4"));
-	cases.push_back(CaseParameter("vec2uint32",		"%type = OpTypeVector %u32 2"));
-	cases.push_back(CaseParameter("matrix",			"%type = OpTypeMatrix %fvec3 3"));
-	cases.push_back(CaseParameter("image",			"%type = OpTypeImage %f32 2D 0 0 0 1 Unknown"));
-	cases.push_back(CaseParameter("sampler",		"%type = OpTypeSampler"));
-	cases.push_back(CaseParameter("sampledimage",	"%img = OpTypeImage %f32 2D 0 0 0 1 Unknown\n"
-													"%type = OpTypeSampledImage %img"));
-	cases.push_back(CaseParameter("array",			"%100 = OpConstant %u32 100\n"
-													"%type = OpTypeArray %i32 %100"));
-	cases.push_back(CaseParameter("runtimearray",	"%type = OpTypeRuntimeArray %f32"));
-	cases.push_back(CaseParameter("struct",			"%type = OpTypeStruct %f32 %i32 %u32"));
-	cases.push_back(CaseParameter("pointer",		"%type = OpTypePointer Function %i32"));
+	cases.push_back(CaseParameter("bool",			"%bool"));
+	cases.push_back(CaseParameter("sint32",			"%i32"));
+	cases.push_back(CaseParameter("uint32",			"%u32"));
+	cases.push_back(CaseParameter("float32",		"%f32"));
+	cases.push_back(CaseParameter("vec4float32",	"%fvec4"));
+	cases.push_back(CaseParameter("vec2uint32",		"%uvec2"));
+	cases.push_back(CaseParameter("matrix",			"%fmat33"));
+	cases.push_back(CaseParameter("image",			"%image"));
+	cases.push_back(CaseParameter("sampler",		"%sampler"));
+	cases.push_back(CaseParameter("sampledimage",	"%simage"));
+	cases.push_back(CaseParameter("array",			"%uarr100"));
+	cases.push_back(CaseParameter("runtimearray",	"%f32arr"));
+	cases.push_back(CaseParameter("struct",			"%struct"));
+	cases.push_back(CaseParameter("pointer",		"%pointer"));
 
 	fillRandomScalars(rnd, 1.f, 100.f, &positiveFloats[0], numElements);
 
@@ -6950,29 +6963,29 @@
 	getDefaultColors(defaultColors);
 
 	// First, simple cases that don't do anything with the OpUndef result.
-	fragments["testfun"] =
-		"%test_code = OpFunction %v4f32 None %v4f32_function\n"
-		"%param1 = OpFunctionParameter %v4f32\n"
-		"%label_testfun = OpLabel\n"
-		"%undef = OpUndef %type\n"
-		"OpReturnValue %param1\n"
-		"OpFunctionEnd\n"
-		;
-	struct NameCodePair { string name, code; };
+	struct NameCodePair { string name, decl, type; };
 	const NameCodePair tests[] =
 	{
-		{"bool", "%type = OpTypeBool"},
-		{"vec2uint32", "%type = OpTypeVector %u32 2"},
-		{"image", "%type = OpTypeImage %f32 2D 0 0 0 1 Unknown"},
-		{"sampler", "%type = OpTypeSampler"},
-		{"sampledimage", "%img = OpTypeImage %f32 2D 0 0 0 1 Unknown\n" "%type = OpTypeSampledImage %img"},
-		{"pointer", "%type = OpTypePointer Function %i32"},
-		{"runtimearray", "%type = OpTypeRuntimeArray %f32"},
-		{"array", "%c_u32_100 = OpConstant %u32 100\n" "%type = OpTypeArray %i32 %c_u32_100"},
-		{"struct", "%type = OpTypeStruct %f32 %i32 %u32"}};
+		{"bool", "", "%bool"},
+		{"vec2uint32", "%type = OpTypeVector %u32 2", "%type"},
+		{"image", "%type = OpTypeImage %f32 2D 0 0 0 1 Unknown", "%type"},
+		{"sampler", "%type = OpTypeSampler", "%type"},
+		{"sampledimage", "%img = OpTypeImage %f32 2D 0 0 0 1 Unknown\n" "%type = OpTypeSampledImage %img", "%type"},
+		{"pointer", "", "%fp_i32"},
+		{"runtimearray", "%type = OpTypeRuntimeArray %f32", "%type"},
+		{"array", "%c_u32_100 = OpConstant %u32 100\n" "%type = OpTypeArray %i32 %c_u32_100", "%type"},
+		{"struct", "%type = OpTypeStruct %f32 %i32 %u32", "%type"}};
 	for (size_t testNdx = 0; testNdx < sizeof(tests) / sizeof(NameCodePair); ++testNdx)
 	{
-		fragments["pre_main"] = tests[testNdx].code;
+		fragments["undef_type"] = tests[testNdx].type;
+		fragments["testfun"] = StringTemplate(
+			"%test_code = OpFunction %v4f32 None %v4f32_function\n"
+			"%param1 = OpFunctionParameter %v4f32\n"
+			"%label_testfun = OpLabel\n"
+			"%undef = OpUndef ${undef_type}\n"
+			"OpReturnValue %param1\n"
+			"OpFunctionEnd\n").specialize(fragments);
+		fragments["pre_main"] = tests[testNdx].decl;
 		createTestsForAllStages(tests[testNdx].name, defaultColors, defaultColors, fragments, opUndefTests.get());
 	}
 	fragments.clear();
diff --git a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
index e4a18e8..7ac5fe3 100644
--- a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
+++ b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
@@ -1953,8 +1953,8 @@
 	vector<BlockDataPtr>  mappedBlockPtrs;
 
 	// Upload base buffers
+	const std::vector<int> bufferSizes	= computeBufferSizes(m_interface, m_refLayout);
 	{
-		const std::vector<int>			bufferSizes		= computeBufferSizes(m_interface, m_refLayout);
 		std::vector<void*>				mapPtrs;
 		std::vector<BlockLocation>		blockLocations	(numBlocks);
 
@@ -2136,6 +2136,54 @@
 
 	vk.cmdDispatch(*cmdBuffer, 1, 1, 1);
 
+	// Add barriers for shader writes to storage buffers before host access
+	std::vector<vk::VkBufferMemoryBarrier> barriers;
+	if (m_bufferMode == SSBOLayoutCase::BUFFERMODE_PER_BLOCK)
+	{
+		for (int blockNdx = 0; blockNdx < numBlocks; blockNdx++)
+		{
+			const vk::VkBuffer uniformBuffer = m_uniformBuffers[blockNdx].get()->get();
+
+			const vk::VkBufferMemoryBarrier barrier	=
+			{
+				vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+				DE_NULL,
+				vk::VK_ACCESS_SHADER_WRITE_BIT,
+				vk::VK_ACCESS_HOST_READ_BIT,
+				VK_QUEUE_FAMILY_IGNORED,
+				VK_QUEUE_FAMILY_IGNORED,
+				uniformBuffer,
+				0u,
+				static_cast<vk::VkDeviceSize>(bufferSizes[blockNdx])
+			};
+			barriers.push_back(barrier);
+		}
+	}
+	else
+	{
+		const vk::VkBuffer uniformBuffer = m_uniformBuffers[0].get()->get();
+
+		vk::VkDeviceSize totalSize	= 0;
+		for (size_t bufferNdx = 0; bufferNdx < bufferSizes.size(); bufferNdx++)
+			totalSize += bufferSizes[bufferNdx];
+
+		const vk::VkBufferMemoryBarrier barrier	=
+		{
+			vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+			DE_NULL,
+			vk::VK_ACCESS_SHADER_WRITE_BIT,
+			vk::VK_ACCESS_HOST_READ_BIT,
+			VK_QUEUE_FAMILY_IGNORED,
+			VK_QUEUE_FAMILY_IGNORED,
+			uniformBuffer,
+			0u,
+			totalSize
+		};
+		barriers.push_back(barrier);
+	}
+	vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0,
+						  0u, DE_NULL, static_cast<deUint32>(barriers.size()), &barriers[0], 0u, DE_NULL);
+
 	VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
 
 	const vk::VkFenceCreateInfo	fenceParams =
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureFilteringAnisotropyTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureFilteringAnisotropyTests.cpp
index 8747e54..f987a81 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureFilteringAnisotropyTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureFilteringAnisotropyTests.cpp
@@ -136,9 +136,13 @@
 					renderedFrame.getAccess(), renderedAnisotropyFrame.getAccess(), 0.05f, tcu::COMPARE_LOG_RESULT))
 				return tcu::TestStatus::fail("Fail");
 
-			if (floatThresholdCompare (m_context.getTestContext().getLog(), "Expecting comparison to fail", "Expecting comparison to fail",
-					renderedFrame.getAccess(), renderedAnisotropyFrame.getAccess(), Vec4(0.05f), tcu::COMPARE_LOG_RESULT))
-				return tcu::TestStatus::fail("Fail");
+			// Anisotropic filtering is implementation dependent. Expecting differences with minification/magnification filter set to NEAREST is too strict.
+			if (m_refParams.minFilter != tcu::Sampler::NEAREST && m_refParams.magFilter != tcu::Sampler::NEAREST)
+			{
+				if (floatThresholdCompare (m_context.getTestContext().getLog(), "Expecting comparison to fail", "Expecting comparison to fail",
+							   renderedFrame.getAccess(), renderedAnisotropyFrame.getAccess(), Vec4(0.05f), tcu::COMPARE_LOG_RESULT))
+					return tcu::TestStatus::fail("Fail");
+			}
 		}
 		return tcu::TestStatus::pass("Pass");
 	}
diff --git a/external/vulkancts/mustpass/1.0.1/src/master.txt b/external/vulkancts/mustpass/1.0.1/src/master.txt
index 0a989ab..171b363 100644
--- a/external/vulkancts/mustpass/1.0.1/src/master.txt
+++ b/external/vulkancts/mustpass/1.0.1/src/master.txt
@@ -84911,30 +84911,6 @@
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat
@@ -84959,20 +84935,6 @@
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.sparse_repeat_mirrored_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_1
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_1
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_2
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_2
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
diff --git a/external/vulkancts/mustpass/1.0.1/vk-default.txt b/external/vulkancts/mustpass/1.0.1/vk-default.txt
index 0a989ab..171b363 100644
--- a/external/vulkancts/mustpass/1.0.1/vk-default.txt
+++ b/external/vulkancts/mustpass/1.0.1/vk-default.txt
@@ -84911,30 +84911,6 @@
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat
@@ -84959,20 +84935,6 @@
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.sparse_repeat_mirrored_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_1
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_1
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_2
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_2
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
diff --git a/external/vulkancts/mustpass/1.0.2/src/waivers.txt b/external/vulkancts/mustpass/1.0.2/src/waivers.txt
new file mode 100644
index 0000000..1b9e7d8
--- /dev/null
+++ b/external/vulkancts/mustpass/1.0.2/src/waivers.txt
@@ -0,0 +1,50 @@
+#
+# VK-GL-CTS Issue #336
+#
+# This occurs on some versions of Imagination Technologies G6200, G6230, G6400, and G6430
+# Rogue Series 6 GPU's.
+#
+# The affected GPU's are unable to correctly filter CEM corners with F32 textures, this
+# includes the ability to gather texels for texel gather instructions.
+#
+# An application using gather on an F32 texture would obtain incorrect texel values around
+# the corners of the cubemap.
+#
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_clamp_to_edge_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_repeat_mirrored_repeat
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_nearest_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_linear_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_nearest_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_1
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_2
+dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_2
diff --git a/external/vulkancts/mustpass/1.0.2/vk-default.txt b/external/vulkancts/mustpass/1.0.2/vk-default.txt
index 65e479c..953edd4 100644
--- a/external/vulkancts/mustpass/1.0.2/vk-default.txt
+++ b/external/vulkancts/mustpass/1.0.2/vk-default.txt
@@ -121533,30 +121533,6 @@
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_less.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_clamp_to_edge_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_repeat_mirrored_repeat
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_npot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat
@@ -121581,20 +121557,6 @@
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.sparse_repeat_mirrored_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.sparse_mirrored_repeat_clamp_to_edge
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_nearest_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_nearest_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_1
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_1
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.level_2
-dEQP-VK.glsl.texture_gather.basic.cube.depth32f.base_level.sparse_level_2
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
diff --git a/external/vulkancts/scripts/build_mustpass.py b/external/vulkancts/scripts/build_mustpass.py
index b5bc747..76ecd3b 100644
--- a/external/vulkancts/scripts/build_mustpass.py
+++ b/external/vulkancts/scripts/build_mustpass.py
@@ -28,7 +28,7 @@
 from build.common import DEQP_DIR
 from build.config import ANY_GENERATOR
 from build_caselists import Module, getModuleByName, getBuildConfig, DEFAULT_BUILD_DIR, DEFAULT_TARGET
-from mustpass import Project, Package, Mustpass, Configuration, include, exclude, genMustpassLists
+from mustpass import Project, Package, Mustpass, Configuration, include, exclude, genMustpassLists, parseBuildConfigFromCmdLineArgs
 
 COPYRIGHT_DECLARATION = """
 	 Licensed under the Apache License, Version 2.0 (the "License");
@@ -73,7 +73,8 @@
 						filters		= [include("master.txt"),
 									   exclude("test-issues.txt"),
 									   exclude("excluded-tests.txt"),
-									   exclude("android-tests.txt")]),
+									   exclude("android-tests.txt"),
+									   exclude("waivers.txt")]),
 	 ])
 
 MUSTPASS_LISTS		= [
@@ -83,4 +84,4 @@
 	]
 
 if __name__ == "__main__":
-	genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, BUILD_CONFIG)
+	genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, parseBuildConfigFromCmdLineArgs())
diff --git a/external/vulkancts/scripts/gen_framework.py b/external/vulkancts/scripts/gen_framework.py
index 1893d7d..67ca195 100644
--- a/external/vulkancts/scripts/gen_framework.py
+++ b/external/vulkancts/scripts/gen_framework.py
@@ -549,10 +549,10 @@
 def writeFunctionPointers (api, filename, functionTypes):
 	writeInlFile(filename, INL_HEADER, indentLines(["%s\t%s;" % (getFunctionTypeName(function), getInterfaceName(function)) for function in api.functions if function.getType() in functionTypes]))
 
-def writeInitFunctionPointers (api, filename, functionTypes):
+def writeInitFunctionPointers (api, filename, functionTypes, cond = None):
 	def makeInitFunctionPointers ():
 		for function in api.functions:
-			if function.getType() in functionTypes:
+			if function.getType() in functionTypes and (cond == None or cond(function)):
 				yield "m_vk.%s\t= (%s)\tGET_PROC_ADDR(\"%s\");" % (getInterfaceName(function), getFunctionTypeName(function), function.name)
 
 	writeInlFile(filename, INL_HEADER, indentLines(makeInitFunctionPointers()))
@@ -926,7 +926,7 @@
 	writeFunctionPointers		(api, os.path.join(VULKAN_DIR, "vkPlatformFunctionPointers.inl"),		functionTypes = platformFuncs)
 	writeFunctionPointers		(api, os.path.join(VULKAN_DIR, "vkInstanceFunctionPointers.inl"),		functionTypes = instanceFuncs)
 	writeFunctionPointers		(api, os.path.join(VULKAN_DIR, "vkDeviceFunctionPointers.inl"),			functionTypes = deviceFuncs)
-	writeInitFunctionPointers	(api, os.path.join(VULKAN_DIR, "vkInitPlatformFunctionPointers.inl"),	functionTypes = platformFuncs)
+	writeInitFunctionPointers	(api, os.path.join(VULKAN_DIR, "vkInitPlatformFunctionPointers.inl"),	functionTypes = platformFuncs,	cond = lambda f: f.name != "vkGetInstanceProcAddr")
 	writeInitFunctionPointers	(api, os.path.join(VULKAN_DIR, "vkInitInstanceFunctionPointers.inl"),	functionTypes = instanceFuncs)
 	writeInitFunctionPointers	(api, os.path.join(VULKAN_DIR, "vkInitDeviceFunctionPointers.inl"),		functionTypes = deviceFuncs)
 	writeFuncPtrInterfaceImpl	(api, os.path.join(VULKAN_DIR, "vkPlatformDriverImpl.inl"),				functionTypes = platformFuncs,	className = "PlatformDriver")
diff --git a/framework/common/tcuTexVerifierUtil.cpp b/framework/common/tcuTexVerifierUtil.cpp
index bdc1efa..425e037 100644
--- a/framework/common/tcuTexVerifierUtil.cpp
+++ b/framework/common/tcuTexVerifierUtil.cpp
@@ -125,7 +125,7 @@
 
 static inline int mirror (int a)
 {
-	return a >= 0.0f ? a : -(1 + a);
+	return a >= 0 ? a : -(1 + a);
 }
 
 int wrap (Sampler::WrapMode mode, int c, int size)
diff --git a/framework/common/tcuTexture.cpp b/framework/common/tcuTexture.cpp
index d61b134..52b6cf8 100644
--- a/framework/common/tcuTexture.cpp
+++ b/framework/common/tcuTexture.cpp
@@ -1520,7 +1520,7 @@
 
 static inline int mirror (int a)
 {
-	return a >= 0.0f ? a : -(1 + a);
+	return a >= 0 ? a : -(1 + a);
 }
 
 // Nearest-even rounding in case of tie (fractional part 0.5), otherwise ordinary rounding.
diff --git a/framework/delibs/cmake/CFlags.cmake b/framework/delibs/cmake/CFlags.cmake
index 0df0f43..8a4b9ad 100644
--- a/framework/delibs/cmake/CFlags.cmake
+++ b/framework/delibs/cmake/CFlags.cmake
@@ -46,8 +46,8 @@
 	# \note Remove -Wno-sign-conversion for more warnings
 	set(WARNING_FLAGS			"-Wall -Wextra -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion")
 
-	set(CMAKE_C_FLAGS			"${CMAKE_C_FLAGS} ${TARGET_FLAGS} ${WARNING_FLAGS} -ansi -pedantic ")
-	set(CMAKE_CXX_FLAGS			"${CMAKE_CXX_FLAGS} ${TARGET_FLAGS} ${WARNING_FLAGS} -Wno-delete-non-virtual-dtor")
+	set(CMAKE_C_FLAGS			"${TARGET_FLAGS} ${WARNING_FLAGS} ${CMAKE_C_FLAGS} -std=c90 -pedantic ")
+	set(CMAKE_CXX_FLAGS			"${TARGET_FLAGS} ${WARNING_FLAGS} ${CMAKE_CXX_FLAGS} -std=c++03 -Wno-delete-non-virtual-dtor")
 
 	# Force compiler to generate code where integers have well defined overflow
 	# Turn on -Wstrict-overflow=5 and check all warnings before removing
diff --git a/framework/opengl/simplereference/sglrReferenceContext.cpp b/framework/opengl/simplereference/sglrReferenceContext.cpp
index e5f443b..288b0a9 100644
--- a/framework/opengl/simplereference/sglrReferenceContext.cpp
+++ b/framework/opengl/simplereference/sglrReferenceContext.cpp
@@ -2068,12 +2068,12 @@
 			if (texObj->getType() == Texture::TYPE_2D_ARRAY || texObj->getType() == Texture::TYPE_CUBE_MAP_ARRAY)
 			{
 				RC_IF_ERROR((layer < 0) || (layer >= GL_MAX_ARRAY_TEXTURE_LAYERS),		GL_INVALID_VALUE,		RC_RET_VOID);
-				RC_IF_ERROR((level < 0) || (level > deFloatLog2(GL_MAX_TEXTURE_SIZE)),	GL_INVALID_VALUE,		RC_RET_VOID);
+				RC_IF_ERROR((level < 0) || (level > deLog2Floor32(GL_MAX_TEXTURE_SIZE)),GL_INVALID_VALUE,		RC_RET_VOID);
 			}
 			else if	(texObj->getType() == Texture::TYPE_3D)
 			{
 				RC_IF_ERROR((layer < 0) || (layer >= GL_MAX_3D_TEXTURE_SIZE),				GL_INVALID_VALUE,		RC_RET_VOID);
-				RC_IF_ERROR((level < 0) || (level > deFloatLog2(GL_MAX_3D_TEXTURE_SIZE)),	GL_INVALID_VALUE,		RC_RET_VOID);
+				RC_IF_ERROR((level < 0) || (level > deLog2Floor32(GL_MAX_3D_TEXTURE_SIZE)),	GL_INVALID_VALUE,		RC_RET_VOID);
 			}
 		}
 
diff --git a/modules/egl/teglGLES2SharedRenderingPerfTests.cpp b/modules/egl/teglGLES2SharedRenderingPerfTests.cpp
index b5335a6..bc13aad 100644
--- a/modules/egl/teglGLES2SharedRenderingPerfTests.cpp
+++ b/modules/egl/teglGLES2SharedRenderingPerfTests.cpp
@@ -722,7 +722,6 @@
 
 	void			start			(void);
 	void			join			(void);
-	void			log				(TestLog& log);
 
 	bool			resultOk		(void) { return m_isOk; }
 
@@ -765,12 +764,6 @@
 	m_contexts.clear();
 }
 
-void TestThread::log (TestLog& testLog)
-{
-	if (!m_isOk)
-		testLog << TestLog::Message << "Thread failed: " << m_errorString << TestLog::EndMessage;
-}
-
 void TestThread::start (void)
 {
 	m_startBeginUs = deGetMicroseconds();
diff --git a/modules/egl/teglRenderCase.cpp b/modules/egl/teglRenderCase.cpp
index a0ff8ae..4662487 100644
--- a/modules/egl/teglRenderCase.cpp
+++ b/modules/egl/teglRenderCase.cpp
@@ -158,7 +158,7 @@
 
 		try
 		{
-			std::auto_ptr<eglu::NativePixmap>	pixmap		(pixmapFactory.createPixmap(&nativeDisplay, display, config, DE_NULL, width, height));
+			de::UniquePtr<eglu::NativePixmap>	pixmap		(pixmapFactory.createPixmap(&nativeDisplay, display, config, DE_NULL, width, height));
 			EGLSurface							eglSurface	= createPixmapSurface(nativeDisplay, *pixmap, display, config, DE_NULL);
 			eglu::UniqueSurface					surface		(egl, display, eglSurface);
 
diff --git a/modules/gles2/functional/es2fIntegerStateQueryTests.cpp b/modules/gles2/functional/es2fIntegerStateQueryTests.cpp
index 2b736d7..ed5831c 100644
--- a/modules/gles2/functional/es2fIntegerStateQueryTests.cpp
+++ b/modules/gles2/functional/es2fIntegerStateQueryTests.cpp
@@ -589,9 +589,9 @@
 	if (!state.verifyValidity(testCtx))
 		return;
 
-	if (GLuint(state) < GLfloat(reference))
+	if (state < GLfloat(reference))
 	{
-		testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLfloat(reference) << "; got " << GLuint(state) << TestLog::EndMessage;
+		testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLfloat(reference) << "; got " << state << TestLog::EndMessage;
 		if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
 			testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
 	}
diff --git a/modules/gles2/functional/es2fShaderInvarianceTests.cpp b/modules/gles2/functional/es2fShaderInvarianceTests.cpp
index d404ba6..04f3a68 100644
--- a/modules/gles2/functional/es2fShaderInvarianceTests.cpp
+++ b/modules/gles2/functional/es2fShaderInvarianceTests.cpp
@@ -402,7 +402,6 @@
 {
 public:
 								BasicInvarianceTest		(Context& ctx, const char* name, const char* desc, const std::string& vertexShader1, const std::string& vertexShader2);
-								BasicInvarianceTest		(Context& ctx, const char* name, const char* desc, const std::string& vertexShader1, const std::string& vertexShader2, const std::string& fragmentShader);
 	ShaderPair					genShaders				(void) const;
 
 private:
@@ -428,14 +427,6 @@
 {
 }
 
-BasicInvarianceTest::BasicInvarianceTest (Context& ctx, const char* name, const char* desc, const std::string& vertexShader1, const std::string& vertexShader2, const std::string& fragmentShader)
-	: InvarianceTest	(ctx, name, desc)
-	, m_vertexShader1	(vertexShader1)
-	, m_vertexShader2	(vertexShader2)
-	, m_fragmentShader	(fragmentShader)
-{
-}
-
 BasicInvarianceTest::ShaderPair BasicInvarianceTest::genShaders (void) const
 {
 	ShaderPair retVal;
diff --git a/modules/gles2/functional/es2fUniformApiTests.cpp b/modules/gles2/functional/es2fUniformApiTests.cpp
index ff05e27..04d14fc 100644
--- a/modules/gles2/functional/es2fUniformApiTests.cpp
+++ b/modules/gles2/functional/es2fUniformApiTests.cpp
@@ -773,7 +773,6 @@
 		FEATURE_ARRAY_FIRST_ELEM_NAME_NO_INDEX	= 1<<7
 	};
 
-								UniformCase		(Context& context, const char* name, const char* description, CaseShaderType caseType, const SharedPtr<const UniformCollection>& uniformCollection);
 								UniformCase		(Context& context, const char* name, const char* description, CaseShaderType caseType, const SharedPtr<const UniformCollection>& uniformCollection, deUint32 features);
 								UniformCase		(Context& context, const char* name, const char* description, deUint32 seed); // \note Randomizes caseType, uniformCollection and features.
 	virtual						~UniformCase	(void);
@@ -947,15 +946,6 @@
 {
 }
 
-UniformCase::UniformCase (Context& context, const char* const name, const char* const description, const CaseShaderType caseShaderType, const SharedPtr<const UniformCollection>& uniformCollection)
-	: TestCase				(context, name, description)
-	, CallLogWrapper		(context.getRenderContext().getFunctions(), m_testCtx.getLog())
-	, m_features			(0)
-	, m_uniformCollection	(uniformCollection)
-	, m_caseShaderType		(caseShaderType)
-{
-}
-
 UniformCase::UniformCase (Context& context, const char* name, const char* description, const deUint32 seed)
 	: TestCase				(context, name, description)
 	, CallLogWrapper		(context.getRenderContext().getFunctions(), m_testCtx.getLog())
diff --git a/modules/gles3/functional/es3fFboTestUtil.cpp b/modules/gles3/functional/es3fFboTestUtil.cpp
index 5e2e4f2..7dbabbd 100644
--- a/modules/gles3/functional/es3fFboTestUtil.cpp
+++ b/modules/gles3/functional/es3fFboTestUtil.cpp
@@ -68,10 +68,10 @@
 template <typename T>
 static tcu::Vector<T, 4> castVectorSaturate (const tcu::Vec4& in)
 {
-	return tcu::Vector<T, 4>((in.x() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.x() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.x()))),
-	                         (in.y() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.y() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.y()))),
-							 (in.z() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.z() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.z()))),
-							 (in.w() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.w() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.w()))));
+	return tcu::Vector<T, 4>(((double)in.x() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.x() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.x()))),
+	                         ((double)in.y() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.y() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.y()))),
+							 ((double)in.z() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.z() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.z()))),
+							 ((double)in.w() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.w() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.w()))));
 }
 
 FlatColorShader::FlatColorShader (glu::DataType outputType)
diff --git a/modules/gles3/functional/es3fIntegerStateQueryTests.cpp b/modules/gles3/functional/es3fIntegerStateQueryTests.cpp
index 4837128..16c11b4 100644
--- a/modules/gles3/functional/es3fIntegerStateQueryTests.cpp
+++ b/modules/gles3/functional/es3fIntegerStateQueryTests.cpp
@@ -827,9 +827,9 @@
 	if (!state.verifyValidity(testCtx))
 		return;
 
-	if (GLuint(state) < GLfloat(reference))
+	if (state < GLfloat(reference))
 	{
-		testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLfloat(reference) << "; got " << GLuint(state) << TestLog::EndMessage;
+		testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLfloat(reference) << "; got " << state << TestLog::EndMessage;
 		if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
 			testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
 	}
diff --git a/modules/gles3/functional/es3fShaderInvarianceTests.cpp b/modules/gles3/functional/es3fShaderInvarianceTests.cpp
index 765598a..cceba6a 100644
--- a/modules/gles3/functional/es3fShaderInvarianceTests.cpp
+++ b/modules/gles3/functional/es3fShaderInvarianceTests.cpp
@@ -402,7 +402,6 @@
 {
 public:
 								BasicInvarianceTest		(Context& ctx, const char* name, const char* desc, const std::string& vertexShader1, const std::string& vertexShader2);
-								BasicInvarianceTest		(Context& ctx, const char* name, const char* desc, const std::string& vertexShader1, const std::string& vertexShader2, const std::string& fragmentShader);
 	ShaderPair					genShaders				(void) const;
 
 private:
@@ -430,14 +429,6 @@
 {
 }
 
-BasicInvarianceTest::BasicInvarianceTest (Context& ctx, const char* name, const char* desc, const std::string& vertexShader1, const std::string& vertexShader2, const std::string& fragmentShader)
-	: InvarianceTest	(ctx, name, desc)
-	, m_vertexShader1	(vertexShader1)
-	, m_vertexShader2	(vertexShader2)
-	, m_fragmentShader	(fragmentShader)
-{
-}
-
 BasicInvarianceTest::ShaderPair BasicInvarianceTest::genShaders (void) const
 {
 	ShaderPair retVal;
diff --git a/modules/gles3/functional/es3fUniformApiTests.cpp b/modules/gles3/functional/es3fUniformApiTests.cpp
index be953af..07fdd53 100644
--- a/modules/gles3/functional/es3fUniformApiTests.cpp
+++ b/modules/gles3/functional/es3fUniformApiTests.cpp
@@ -938,7 +938,6 @@
 		FEATURE_ARRAY_FIRST_ELEM_NAME_NO_INDEX	= 1<<9
 	};
 
-								UniformCase		(Context& context, const char* name, const char* description, CaseShaderType caseType, const SharedPtr<const UniformCollection>& uniformCollection);
 								UniformCase		(Context& context, const char* name, const char* description, CaseShaderType caseType, const SharedPtr<const UniformCollection>& uniformCollection, deUint32 features);
 								UniformCase		(Context& context, const char* name, const char* description, deUint32 seed); // \note Randomizes caseType, uniformCollection and features.
 	virtual						~UniformCase	(void);
@@ -1118,15 +1117,6 @@
 {
 }
 
-UniformCase::UniformCase (Context& context, const char* const name, const char* const description, const CaseShaderType caseShaderType, const SharedPtr<const UniformCollection>& uniformCollection)
-	: TestCase				(context, name, description)
-	, CallLogWrapper		(context.getRenderContext().getFunctions(), m_testCtx.getLog())
-	, m_features			(0)
-	, m_uniformCollection	(uniformCollection)
-	, m_caseShaderType		(caseShaderType)
-{
-}
-
 UniformCase::UniformCase (Context& context, const char* name, const char* description, const deUint32 seed)
 	: TestCase				(context, name, description)
 	, CallLogWrapper		(context.getRenderContext().getFunctions(), m_testCtx.getLog())
diff --git a/modules/gles31/functional/es31fFboTestUtil.cpp b/modules/gles31/functional/es31fFboTestUtil.cpp
index 1170cca..b484e9f 100644
--- a/modules/gles31/functional/es31fFboTestUtil.cpp
+++ b/modules/gles31/functional/es31fFboTestUtil.cpp
@@ -68,10 +68,10 @@
 template <typename T>
 static tcu::Vector<T, 4> castVectorSaturate (const tcu::Vec4& in)
 {
-	return tcu::Vector<T, 4>((in.x() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.x() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.x()))),
-	                         (in.y() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.y() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.y()))),
-							 (in.z() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.z() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.z()))),
-							 (in.w() + 0.5f >= std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : ((in.w() - 0.5f <= std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.w()))));
+	return tcu::Vector<T, 4>(((double)in.x() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.x() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.x()))),
+	                         ((double)in.y() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.y() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.y()))),
+							 ((double)in.z() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.z() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.z()))),
+							 ((double)in.w() + 0.5 >= (double)std::numeric_limits<T>::max()) ? (std::numeric_limits<T>::max()) : (((double)in.w() - 0.5 <= (double)std::numeric_limits<T>::min()) ? (std::numeric_limits<T>::min()) : (T(in.w()))));
 }
 
 static string genTexFragmentShader (const vector<glu::DataType>& samplerTypes, glu::DataType outputType)
diff --git a/modules/gles31/functional/es31fMultisampleTests.cpp b/modules/gles31/functional/es31fMultisampleTests.cpp
index 84ff6a0..c55a4a8 100644
--- a/modules/gles31/functional/es31fMultisampleTests.cpp
+++ b/modules/gles31/functional/es31fMultisampleTests.cpp
@@ -174,7 +174,6 @@
 
 protected:
 	void						renderTriangle				(const Vec3& p0, const Vec3& p1, const Vec3& p2, const Vec4& c0, const Vec4& c1, const Vec4& c2) const;
-	void						renderTriangle				(const Vec3& p0, const Vec3& p1, const Vec3& p2, const Vec4& color) const;
 	void						renderTriangle				(const Vec2& p0, const Vec2& p1, const Vec2& p2, const Vec4& c0, const Vec4& c1, const Vec4& c2) const;
 	void						renderTriangle				(const Vec2& p0, const Vec2& p1, const Vec2& p2, const Vec4& color) const;
 	void						renderQuad					(const Vec2& p0, const Vec2& p1, const Vec2& p2, const Vec2& p3, const Vec4& c0, const Vec4& c1, const Vec4& c2, const Vec4& c3) const;
@@ -344,11 +343,6 @@
 	GLU_EXPECT_NO_ERROR(gl.getError(), "drawArrays");
 }
 
-void DefaultFBOMultisampleCase::renderTriangle (const Vec3& p0, const Vec3& p1, const Vec3& p2, const Vec4& color) const
-{
-	renderTriangle(p0, p1, p2, color, color, color);
-}
-
 void DefaultFBOMultisampleCase::renderTriangle (const Vec2& p0, const Vec2& p1, const Vec2& p2, const Vec4& c0, const Vec4& c1, const Vec4& c2) const
 {
 	renderTriangle(Vec3(p0.x(), p0.y(), 0.0f),
diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
index 2b3d2cf..95d1950 100644
--- a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
@@ -425,7 +425,6 @@
 	bool		isStagePresent		(glu::ShaderType stage) const;
 	bool		isStageReferencing	(glu::ShaderType stage) const;
 
-	deUint32	getPresentMask		(void) const;
 	deUint32	getReferencingMask	(void) const;
 
 	const glu::GLSLVersion	m_version;
@@ -483,17 +482,6 @@
 	return m_stageReferencing[stage];
 }
 
-deUint32 ShaderSet::getPresentMask (void) const
-{
-	deUint32 mask = 0;
-	for (deUint32 stage = 0; stage < glu::SHADERTYPE_LAST; ++stage)
-	{
-		if (m_stagePresent[stage])
-			mask |= (1u << stage);
-	}
-	return mask;
-}
-
 deUint32 ShaderSet::getReferencingMask (void) const
 {
 	deUint32 mask = 0;
diff --git a/modules/gles31/functional/es31fProgramUniformTests.cpp b/modules/gles31/functional/es31fProgramUniformTests.cpp
index 91a1257..19fd1c0 100644
--- a/modules/gles31/functional/es31fProgramUniformTests.cpp
+++ b/modules/gles31/functional/es31fProgramUniformTests.cpp
@@ -829,7 +829,6 @@
 		FEATURE_ARRAY_FIRST_ELEM_NAME_NO_INDEX	= 1<<8
 	};
 
-								UniformCase		(Context& context, const char* name, const char* description, CaseShaderType caseType, const SharedPtr<const UniformCollection>& uniformCollection);
 								UniformCase		(Context& context, const char* name, const char* description, CaseShaderType caseType, const SharedPtr<const UniformCollection>& uniformCollection, deUint32 features);
 	virtual						~UniformCase	(void);
 
@@ -945,15 +944,6 @@
 {
 }
 
-UniformCase::UniformCase (Context& context, const char* const name, const char* const description, const CaseShaderType caseShaderType, const SharedPtr<const UniformCollection>& uniformCollection)
-	: TestCase				(context, name, description)
-	, CallLogWrapper		(context.getRenderContext().getFunctions(), m_testCtx.getLog())
-	, m_features			(0)
-	, m_uniformCollection	(uniformCollection)
-	, m_caseShaderType		(caseShaderType)
-{
-}
-
 void UniformCase::init (void)
 {
 	{
diff --git a/modules/glshared/glsBuiltinPrecisionTests.cpp b/modules/glshared/glsBuiltinPrecisionTests.cpp
index 76d83c8..da69f89 100644
--- a/modules/glshared/glsBuiltinPrecisionTests.cpp
+++ b/modules/glshared/glsBuiltinPrecisionTests.cpp
@@ -1085,10 +1085,10 @@
 template <typename T0 = Void, typename T1 = Void, typename T2 = Void, typename T3 = Void>
 struct Tuple4
 {
-	explicit Tuple4 (const T0& e0 = T0(),
-					 const T1& e1 = T1(),
-					 const T2& e2 = T2(),
-					 const T3& e3 = T3())
+	explicit Tuple4 (const T0 e0 = T0(),
+					 const T1 e1 = T1(),
+					 const T2 e2 = T2(),
+					 const T3 e3 = T3())
 		: a	(e0)
 		, b	(e1)
 		, c	(e2)
diff --git a/modules/glshared/glsDrawTest.cpp b/modules/glshared/glsDrawTest.cpp
index c721e14..155bd35 100644
--- a/modules/glshared/glsDrawTest.cpp
+++ b/modules/glshared/glsDrawTest.cpp
@@ -885,7 +885,7 @@
 	return GLValue::Half::create(std::fabs(val.to<float>()));
 }
 
-// AttriuteArray
+// AttributeArray
 
 class AttributeArray
 {
@@ -894,7 +894,6 @@
 								~AttributeArray		(void);
 
 	void						data				(DrawTestSpec::Target target, size_t size, const char* data, DrawTestSpec::Usage usage);
-	void						subdata				(DrawTestSpec::Target target, int offset, int size, const char* data);
 	void						setupArray			(bool bound, int offset, int size, DrawTestSpec::InputType inType, DrawTestSpec::OutputType outType, bool normalized, int stride, int instanceDivisor, const rr::GenericVec4& defaultAttrib, bool isPositionAttr, bool bgraComponentOrder);
 	void						bindAttribute		(deUint32 loc);
 	void						bindIndexArray		(DrawTestSpec::Target storage);
@@ -993,24 +992,6 @@
 		DE_ASSERT(false);
 }
 
-void AttributeArray::subdata (DrawTestSpec::Target target, int offset, int size, const char* ptr)
-{
-	m_target = target;
-
-	if (m_storage == DrawTestSpec::STORAGE_BUFFER)
-	{
-		m_ctx.bindBuffer(targetToGL(target), m_glBuffer);
-		GLU_EXPECT_NO_ERROR(m_ctx.getError(), "glBindBuffer()");
-
-		m_ctx.bufferSubData(targetToGL(target), offset, size, ptr);
-		GLU_EXPECT_NO_ERROR(m_ctx.getError(), "glBufferSubData()");
-	}
-	else if (m_storage == DrawTestSpec::STORAGE_USER)
-		std::memcpy(m_data + offset, ptr, size);
-	else
-		DE_ASSERT(false);
-}
-
 void AttributeArray::setupArray (bool bound, int offset, int size, DrawTestSpec::InputType inputType, DrawTestSpec::OutputType outType, bool normalized, int stride, int instanceDivisor, const rr::GenericVec4& defaultAttrib, bool isPositionAttr, bool bgraComponentOrder)
 {
 	m_componentCount	= size;
@@ -1536,7 +1517,6 @@
 private:
 	template<typename T>
 	static char*			createIndices			(int seed, int elementCount, int offset, int min, int max, int indexBase);
-	static void				setData					(char* data, DrawTestSpec::InputType type, deRandom& rnd, GLValue min, GLValue max);
 
 	static char*			generateBasicArray		(int seed, int elementCount, int componentCount, int offset, int stride, DrawTestSpec::InputType type);
 	template<typename T, typename GLType>
@@ -1544,70 +1524,6 @@
 	static char*			generatePackedArray		(int seed, int elementCount, int componentCount, int offset, int stride);
 };
 
-void RandomArrayGenerator::setData (char* data, DrawTestSpec::InputType type, deRandom& rnd, GLValue min, GLValue max)
-{
-	switch (type)
-	{
-		case DrawTestSpec::INPUTTYPE_FLOAT:
-		{
-			alignmentSafeAssignment<float>(data, getRandom<GLValue::Float>(rnd, min.fl, max.fl));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_SHORT:
-		{
-			alignmentSafeAssignment<deInt16>(data, getRandom<GLValue::Short>(rnd, min.s, max.s));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_UNSIGNED_SHORT:
-		{
-			alignmentSafeAssignment<deUint16>(data, getRandom<GLValue::Ushort>(rnd, min.us, max.us));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_BYTE:
-		{
-			alignmentSafeAssignment<deInt8>(data, getRandom<GLValue::Byte>(rnd, min.b, max.b));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_UNSIGNED_BYTE:
-		{
-			alignmentSafeAssignment<deUint8>(data, getRandom<GLValue::Ubyte>(rnd, min.ub, max.ub));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_FIXED:
-		{
-			alignmentSafeAssignment<deInt32>(data, getRandom<GLValue::Fixed>(rnd, min.fi, max.fi));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_INT:
-		{
-			alignmentSafeAssignment<deInt32>(data, getRandom<GLValue::Int>(rnd, min.i, max.i));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_UNSIGNED_INT:
-		{
-			alignmentSafeAssignment<deUint32>(data, getRandom<GLValue::Uint>(rnd, min.ui, max.ui));
-			break;
-		}
-
-		case DrawTestSpec::INPUTTYPE_HALF:
-		{
-			alignmentSafeAssignment<deFloat16>(data, getRandom<GLValue::Half>(rnd, min.h, max.h).getValue());
-			break;
-		}
-
-		default:
-			DE_ASSERT(false);
-			break;
-	}
-}
-
 char* RandomArrayGenerator::generateArray (int seed, int elementCount, int componentCount, int offset, int stride, DrawTestSpec::InputType type)
 {
 	if (type == DrawTestSpec::INPUTTYPE_INT_2_10_10_10 || type == DrawTestSpec::INPUTTYPE_UNSIGNED_INT_2_10_10_10)
diff --git a/scripts/build_android_mustpass.py b/scripts/build_android_mustpass.py
index 162ab3a..e2e8815 100644
--- a/scripts/build_android_mustpass.py
+++ b/scripts/build_android_mustpass.py
@@ -23,7 +23,7 @@
 from build.common import DEQP_DIR
 from build.config import ANY_GENERATOR
 from build_caselists import Module, getModuleByName, getBuildConfig, DEFAULT_BUILD_DIR, DEFAULT_TARGET
-from mustpass import Project, Package, Mustpass, Configuration, include, exclude, genMustpassLists
+from mustpass import Project, Package, Mustpass, Configuration, include, exclude, genMustpassLists, parseBuildConfigFromCmdLineArgs
 
 import os
 
@@ -515,7 +515,5 @@
 		Mustpass(project = CTS_PROJECT, version = "master",		packages = [MASTER_EGL_PKG, MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG, MASTER_VULKAN_PKG])
 	]
 
-BUILD_CONFIG				= getBuildConfig(DEFAULT_BUILD_DIR, DEFAULT_TARGET, "Debug")
-
 if __name__ == "__main__":
-	genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, BUILD_CONFIG)
+	genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, parseBuildConfigFromCmdLineArgs())
diff --git a/scripts/check_build_sanity.py b/scripts/check_build_sanity.py
index fae53a2..88500a4 100644
--- a/scripts/check_build_sanity.py
+++ b/scripts/check_build_sanity.py
@@ -43,14 +43,20 @@
 		raise Exception("Not implemented")
 
 class RunScript(BuildTestStep):
-	def __init__ (self, scriptPath):
-		self.scriptPath = scriptPath
+	def __init__ (self, scriptPath, getExtraArgs = None):
+		self.scriptPath		= scriptPath
+		self.getExtraArgs	= getExtraArgs
 
 	def getName (self):
 		return self.scriptPath
 
 	def run (self, env):
-		execute(["python", os.path.join(env.srcDir, self.scriptPath)])
+		args = ["python", os.path.join(env.srcDir, self.scriptPath)]
+
+		if self.getExtraArgs != None:
+			args += self.getExtraArgs(env)
+
+		execute(args)
 
 def makeCflagsArgs (cflags):
 	cflagsStr = " ".join(cflags)
@@ -121,6 +127,18 @@
 			return "-" + version
 	return ""
 
+def runSteps (steps):
+	for step in steps:
+		if step.isAvailable(env):
+			print "Run: %s" % step.getName()
+			step.run(env)
+		else:
+			print "Skip: %s" % step.getName()
+
+def runRecipe (steps):
+	allSteps = PREREQUISITES + steps + POST_CHECKS
+	runSteps(allSteps)
+
 COMMON_GCC_CFLAGS	= ["-Werror"]
 COMMON_CLANG_CFLAGS	= COMMON_GCC_CFLAGS + ["-Wno-error=unused-command-line-argument"]
 GCC_32BIT_CFLAGS	= COMMON_GCC_CFLAGS + ["-m32"]
@@ -129,8 +147,17 @@
 CLANG_64BIT_CFLAGS	= COMMON_CLANG_CFLAGS + ["-m64"]
 CLANG_VERSION		= getClangVersion()
 
-STEPS = [
-	RunScript(os.path.join("external", "fetch_sources.py")),
+# Always ran before any receipe
+PREREQUISITES		= [
+	RunScript(os.path.join("external", "fetch_sources.py"))
+]
+
+# Always ran after any receipe
+POST_CHECKS			= [
+	CheckSrcChanges()
+]
+
+BUILD_TARGETS		= [
 	Build("clang-64-debug",
 		  UnixConfig("null",
 					 "Debug",
@@ -155,19 +182,50 @@
 	Build("vs-64-debug",
 		  VSConfig("Debug"),
 		  ANY_VS_X64_GENERATOR),
-	RunScript(os.path.join("scripts", "build_android_mustpass.py")),
-	RunScript(os.path.join("external", "vulkancts", "scripts", "build_mustpass.py")),
-	RunScript(os.path.join("scripts", "gen_egl.py")),
-	RunScript(os.path.join("scripts", "opengl", "gen_all.py")),
-	RunScript(os.path.join("scripts", "src_util", "check_all.py")),
-	RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework.py")),
-	CheckSrcChanges(),
 ]
 
+SPECIAL_RECIPES		= [
+	('android-mustpass', [
+			RunScript(os.path.join("scripts", "build_android_mustpass.py"),
+					  lambda env: ["--build-dir", os.path.join(env.tmpDir, "android-mustpass")]),
+		]),
+	('vulkan-mustpass', [
+			RunScript(os.path.join("external", "vulkancts", "scripts", "build_mustpass.py"),
+					  lambda env: ["--build-dir", os.path.join(env.tmpDir, "vulkan-mustpass")]),
+		]),
+	('gen-inl-files', [
+			RunScript(os.path.join("scripts", "gen_egl.py")),
+			RunScript(os.path.join("scripts", "opengl", "gen_all.py")),
+			RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework.py")),
+			RunScript(os.path.join("scripts", "src_util", "check_all.py")),
+		])
+]
+
+def getBuildRecipes ():
+	return [(b.getName(), [b]) for b in BUILD_TARGETS]
+
+def getAllRecipe (recipes):
+	allSteps = []
+	for name, steps in recipes:
+		allSteps += steps
+	return ("all", allSteps)
+
+def getRecipes ():
+	recipes = getBuildRecipes()
+	recipes += SPECIAL_RECIPES
+	return recipes
+
+def getRecipe (recipes, recipeName):
+	for curName, steps in recipes:
+		if curName == recipeName:
+			return (curName, steps)
+	return None
+
+RECIPES			= getRecipes()
+
 def parseArgs ():
 	parser = argparse.ArgumentParser(description = "Build and test source",
 									 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
-
 	parser.add_argument("-s",
 						"--src-dir",
 						dest="srcDir",
@@ -178,17 +236,35 @@
 						dest="tmpDir",
 						default=os.path.join(tempfile.gettempdir(), "deqp-build-test"),
 						help="Temporary directory")
+	parser.add_argument("-r",
+						"--recipe",
+						dest="recipe",
+						choices=[n for n, s in RECIPES] + ["all"],
+						default="all",
+						help="Build / test recipe")
+	parser.add_argument("-d",
+						"--dump-recipes",
+						dest="dumpRecipes",
+						action="store_true",
+						help="Print out recipes that have any available actions")
 	return parser.parse_args()
 
 if __name__ == "__main__":
 	args	= parseArgs()
 	env		= Environment(args.srcDir, args.tmpDir)
 
-	for step in STEPS:
-		if step.isAvailable(env):
-			print "Run: %s" % step.getName()
-			step.run(env)
-		else:
-			print "Skip: %s" % step.getName()
+	if args.dumpRecipes:
+		for name, steps in RECIPES:
+			for step in steps:
+				if step.isAvailable(env):
+					print name
+					break
+	else:
+		name, steps	= getAllRecipe(RECIPES) if args.recipe == "all" \
+					  else getRecipe(RECIPES, args.recipe)
 
-	print "All steps completed successfully"
+		print "Running %s" % name
+
+		runRecipe(steps)
+
+		print "All steps completed successfully"
diff --git a/scripts/mustpass.py b/scripts/mustpass.py
index 33b123d..5d4a92c 100644
--- a/scripts/mustpass.py
+++ b/scripts/mustpass.py
@@ -27,6 +27,7 @@
 from fnmatch import fnmatch
 from copy import copy
 
+import argparse
 import xml.etree.cElementTree as ElementTree
 import xml.dom.minidom as minidom
 
@@ -372,3 +373,27 @@
 
 	for mustpass in mustpassLists:
 		genMustpass(mustpass, moduleCaseLists)
+
+def parseCmdLineArgs ():
+	parser = argparse.ArgumentParser(description = "Build Android CTS mustpass",
+									 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+	parser.add_argument("-b",
+						"--build-dir",
+						dest="buildDir",
+						default=DEFAULT_BUILD_DIR,
+						help="Temporary build directory")
+	parser.add_argument("-t",
+						"--build-type",
+						dest="buildType",
+						default="Debug",
+						help="Build type")
+	parser.add_argument("-c",
+						"--deqp-target",
+						dest="targetName",
+						default=DEFAULT_TARGET,
+						help="dEQP build target")
+	return parser.parse_args()
+
+def parseBuildConfigFromCmdLineArgs ():
+	args = parseCmdLineArgs()
+	return getBuildConfig(args.buildDir, args.targetName, args.buildType)