Merge pull request #16 from jchen10/image_layout

Fix Pipeline barrier test
diff --git a/Android.mk b/Android.mk
index 54f77ee..9cdbe32 100644
--- a/Android.mk
+++ b/Android.mk
@@ -747,7 +747,7 @@
 	-Wno-error=date-time
 
 LOCAL_SDK_VERSION := 9
-LOCAL_CPPFLAGS += -Wno-non-virtual-dtor
+LOCAL_CPPFLAGS += -Wno-non-virtual-dtor -fwrapv
 LOCAL_NDK_STL_VARIANT := gnustl_static
 LOCAL_RTTI_FLAG := -frtti -fexceptions
 LOCAL_MULTILIB := both
diff --git a/android/scripts/common.py b/android/scripts/common.py
index 777d23f..1680b41 100644
--- a/android/scripts/common.py
+++ b/android/scripts/common.py
@@ -241,8 +241,8 @@
 
 def selectNDKPath ():
 	candidates =  [
-		os.path.expanduser("~/android-ndk-r10e"),
-		"C:/android/android-ndk-r10e",
+		os.path.expanduser("~/android-ndk-r11"),
+		"C:/android/android-ndk-r11",
 		os.environ.get("ANDROID_NDK_PATH", None), # If not defined, return None
 	]
 
@@ -262,7 +262,7 @@
 # NDK paths
 ANDROID_NDK_PATH				= selectNDKPath()
 ANDROID_NDK_HOST_OS				= getNDKHostOsName(ANDROID_NDK_PATH)
-ANDROID_NDK_TOOLCHAIN_VERSION	= "r10e" # Toolchain file is selected based on this
+ANDROID_NDK_TOOLCHAIN_VERSION	= "r11" # Toolchain file is selected based on this
 
 # Native code build settings
 CMAKE_GENERATOR			= selectByOS({
diff --git a/external/fetch_sources.py b/external/fetch_sources.py
index ca8edb5..7e98e7e 100644
--- a/external/fetch_sources.py
+++ b/external/fetch_sources.py
@@ -174,7 +174,7 @@
 		"spirv-tools"),
 	GitRepo(
 		"https://github.com/KhronosGroup/glslang.git",
-		"f2d8a5c53fda69a7e19defbda7964f380da54ad1",
+		"7b3096a93dd5ebee516da9c4563aa352420c01cd",
 		"glslang"),
 ]
 
diff --git a/external/glslang/CMakeLists.txt b/external/glslang/CMakeLists.txt
index 834190c..840ceab 100644
--- a/external/glslang/CMakeLists.txt
+++ b/external/glslang/CMakeLists.txt
@@ -18,16 +18,7 @@
 	set(GLSLANG_ABS_PATH "${CMAKE_SOURCE_DIR}/${GLSLANG_SRC_PATH}")
 endif ()
 
-find_package(BISON)
-
-# \todo [2015-06-24 pyry] Full C++11 support on Android requires using CLang + libc++
-if (NOT BISON_FOUND AND DE_OS_IS_WIN32 AND EXISTS ${GLSLANG_ABS_PATH}/tools/bison.exe)
-	message(STATUS "Using pre-built bison executable")
-	set(BISON_EXECUTABLE ${GLSLANG_ABS_PATH}/tools/bison.exe)
-	set(BISON_FOUND ON)
-endif ()
-
-if (BISON_FOUND AND EXISTS ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp AND NOT DE_OS_IS_ANDROID)
+if (EXISTS ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp)
 	message(STATUS "glslang found; building with DEQP_SUPPORT_GLSLANG")
 
 	include_directories(
@@ -40,7 +31,6 @@
 		${GLSLANG_ABS_PATH}/glslang/OSDependent
 		${GLSLANG_ABS_PATH}/OGLCompilersDLL
 		${GLSLANG_ABS_PATH}/SPIRV
-		${CMAKE_CURRENT_BINARY_DIR}
 		)
 
 	set(GLSLANG_SRCS
@@ -56,6 +46,7 @@
 		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/ShaderLang.cpp
 		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/SymbolTable.cpp
 		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/Versions.cpp
+		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/glslang_tab.cpp
 		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/intermOut.cpp
 		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/limits.cpp
 		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/linkValidate.cpp
@@ -71,6 +62,12 @@
 		${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp
 		${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/Link.cpp
 		${GLSLANG_ABS_PATH}/OGLCompilersDLL/InitializeDll.cpp
+		
+		${GLSLANG_ABS_PATH}/hlsl/hlslGrammar.cpp
+		${GLSLANG_ABS_PATH}/hlsl/hlslParseHelper.cpp
+		${GLSLANG_ABS_PATH}/hlsl/hlslScanContext.cpp
+		${GLSLANG_ABS_PATH}/hlsl/hlslTokenStream.cpp
+		${GLSLANG_ABS_PATH}/hlsl/hlslOpMap.cpp
 
 		${GLSLANG_ABS_PATH}/SPIRV/GlslangToSpv.cpp
 		${GLSLANG_ABS_PATH}/SPIRV/InReadableOrder.cpp
@@ -78,9 +75,7 @@
 		${GLSLANG_ABS_PATH}/SPIRV/SPVRemapper.cpp
 		${GLSLANG_ABS_PATH}/SPIRV/doc.cpp
 		${GLSLANG_ABS_PATH}/SPIRV/disassemble.cpp
-
-		${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp
-		${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp.h
+		${GLSLANG_ABS_PATH}/SPIRV/Logger.cpp
 
 		osinclude.cpp
 		)
@@ -92,11 +87,6 @@
 		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 	endif ()
 
-	add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp.h
-					   COMMAND ${BISON_EXECUTABLE} --defines=${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp
-					   MAIN_DEPENDENCY ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/glslang.y
-					   WORKING_DIRECTORY ${GLSLANG_ABS_PATH}/glslang)
-
 	add_library(glslang STATIC ${GLSLANG_SRCS})
 	target_link_libraries(glslang dethread ${ZLIB_LIBRARY})
 
diff --git a/external/vulkancts/README.md b/external/vulkancts/README.md
index 7985148..da65ca3 100644
--- a/external/vulkancts/README.md
+++ b/external/vulkancts/README.md
@@ -218,7 +218,7 @@
 If the submission package covers multiple products, you can list them by appending
 additional `PRODUCT:` lines to the conformance statement. For example:
 
-	CONFORM_VERSION:         vulkan-cts-1.0.0-internal
+	CONFORM_VERSION:         vulkan-cts-1.0.0.2
 	PRODUCT:                 Product A
 	PRODUCT:                 Product B
 	...
diff --git a/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp
index b2df06e..cbc26d3 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp
@@ -565,15 +565,6 @@
 			{ 0.0f, 0.0f, 0.0f, 0.0f },									// float										blendConst[4];
 		};
 
-		const VkPipelineDynamicStateCreateInfo	dynamicStateParams		=
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType			sType;
-			DE_NULL,													// const void*				pNext;
-			(VkPipelineDynamicStateCreateFlags)0,
-			0u,															// deUint32					dynamicStateCount;
-			DE_NULL														// const VkDynamicState*	pDynamicStates;
-		};
-
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
 		{
 			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	// VkStructureType									sType;
@@ -589,7 +580,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			DE_NULL,											// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			DE_NULL,											// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
diff --git a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
index b807333..6d3f159 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
@@ -1511,14 +1511,6 @@
 			colorBlendAttState,
 			{ 0.0f, 0.0f, 0.0f, 0.0f }				// blendConstants
 		};
-		const VkPipelineDynamicStateCreateInfo			dynamicState		=
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
-			DE_NULL,
-			(VkPipelineDynamicStateCreateFlags)0,
-			0u,										// dynamicStateCount
-			DE_NULL,								// pDynamicStates
-		};
 		const VkGraphicsPipelineCreateInfo				pipelineInfo		=
 		{
 			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
@@ -1534,7 +1526,7 @@
 			&multisampleState,
 			&depthStencilState,
 			&colorBlendState,
-			&dynamicState,
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,
 			*res.layout.object,
 			*res.renderPass.object,
 			0u,										// subpass
diff --git a/external/vulkancts/modules/vulkan/api/vktApiSmokeTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiSmokeTests.cpp
index 24cca5b..d48b7d6 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiSmokeTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiSmokeTests.cpp
@@ -521,14 +521,6 @@
 		&attBlendParams,											// pAttachments
 		{ 0.0f, 0.0f, 0.0f, 0.0f },									// blendConstants[4]
 	};
-	const VkPipelineDynamicStateCreateInfo	dynamicStateInfo		=
-	{
-		VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,	// sType
-		DE_NULL,												// pNext
-		0u,														// flags
-		0u,														// dynamicStateCount
-		DE_NULL													// pDynamicStates
-	};
 	const VkGraphicsPipelineCreateInfo		pipelineParams			=
 	{
 		VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,		// sType
@@ -544,7 +536,7 @@
 		&multisampleParams,										// pMultisampleState
 		&depthStencilParams,									// pDepthStencilState
 		&blendParams,											// pColorBlendState
-		&dynamicStateInfo,										// pDynamicState
+		(const VkPipelineDynamicStateCreateInfo*)DE_NULL,		// pDynamicState
 		*pipelineLayout,										// layout
 		*renderPass,											// renderPass
 		0u,														// subpass
diff --git a/external/vulkancts/modules/vulkan/binding_model/vktBindingShaderAccessTests.cpp b/external/vulkancts/modules/vulkan/binding_model/vktBindingShaderAccessTests.cpp
index c48e866..aec26b2 100644
--- a/external/vulkancts/modules/vulkan/binding_model/vktBindingShaderAccessTests.cpp
+++ b/external/vulkancts/modules/vulkan/binding_model/vktBindingShaderAccessTests.cpp
@@ -947,14 +947,6 @@
 		&cbAttachment,								// pAttachments
 		{ 0.0f, 0.0f, 0.0f, 0.0f },					// blendConst
 	};
-	const vk::VkPipelineDynamicStateCreateInfo			dynState			=
-	{
-		vk::VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
-		DE_NULL,
-		(vk::VkPipelineDynamicStateCreateFlags)0,
-		0u,											// dynamicStateCount
-		DE_NULL,									// pDynamicStates
-	};
 	const vk::VkGraphicsPipelineCreateInfo createInfo =
 	{
 		vk::VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
@@ -970,7 +962,7 @@
 		&msState,														// pMultisampleState
 		&dsState,														// pDepthStencilState
 		&cbState,														// pColorBlendState
-		&dynState,														// pDynamicState
+		(const vk::VkPipelineDynamicStateCreateInfo*)DE_NULL,			// pDynamicState
 		pipelineLayout,													// layout
 		*m_renderPass,													// renderPass
 		0u,																// subpass
diff --git a/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp b/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp
index 28ef574..0c46806 100644
--- a/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp
+++ b/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp
@@ -766,7 +766,7 @@
 		const VkBufferMemoryBarrier stagingBufferPostHostWriteBarrier = makeBufferMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, *stagingBuffer, 0ull, bufferSizeBytes);
 
 		const VkImageMemoryBarrier imagePreCopyBarrier = makeImageMemoryBarrier(
-			0u, 0u,
+			0u, VK_ACCESS_TRANSFER_WRITE_BIT,
 			VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
 			*image, subresourceRange);
 
@@ -2067,6 +2067,11 @@
 
 		const VkBufferMemoryBarrier inputBufferPostHostWriteBarrier = makeBufferMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, *inputBuffer, 0ull, inputBufferSizeBytes);
 
+		const VkImageMemoryBarrier imageLayoutBarrier = makeImageMemoryBarrier(
+			(VkAccessFlags)0, VK_ACCESS_SHADER_WRITE_BIT,
+			VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
+			*image, subresourceRange);
+
 		const VkImageMemoryBarrier imagePreCopyBarrier = makeImageMemoryBarrier(
 			VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
 			VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
@@ -2088,7 +2093,7 @@
 		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
 		vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &inputBufferPostHostWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
+		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &inputBufferPostHostWriteBarrier, 1, &imageLayoutBarrier);
 		vk.cmdDispatch(*cmdBuffer, m_imageSize.x(), m_imageSize.y(), 1u);
 
 		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imagePreCopyBarrier);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
index e306cb9..93ca41b 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
@@ -594,8 +594,8 @@
 				0u,						// deUint32		writeMask;
 				0u						// deUint32		reference;
 			},
-			-1.0f,														// float			minDepthBounds;
-			+1.0f														// float			maxDepthBounds;
+			0.0f,														// float			minDepthBounds;
+			1.0f														// float			maxDepthBounds;
 		};
 
 		// The color blend attachment will be set up before creating the graphics pipeline.
@@ -616,15 +616,6 @@
 			}
 		};
 
-		const VkPipelineDynamicStateCreateInfo dynamicStateParams =
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
-		};
-
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
 		{
 			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	// VkStructureType									sType;
@@ -640,7 +631,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -744,9 +735,28 @@
 			&attachmentClearValue									// const VkClearValue*	pClearValues;
 		};
 
+		// Color image layout transition
+		const VkImageMemoryBarrier imageLayoutBarrier =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,									// VkStructureType            sType;
+			DE_NULL,																// const void*                pNext;
+			(VkAccessFlags)0,														// VkAccessFlags              srcAccessMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,									// VkAccessFlags              dstAccessMask;
+			VK_IMAGE_LAYOUT_UNDEFINED,												// VkImageLayout              oldLayout;
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,								// VkImageLayout              newLayout;
+			VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   srcQueueFamilyIndex;
+			VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   dstQueueFamilyIndex;
+			*m_colorImage,															// VkImage                    image;
+			{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }							// VkImageSubresourceRange    subresourceRange;
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, 1u, &imageLayoutBarrier);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		const VkDeviceSize quadOffset = (m_vertices.size() / BlendTest::QUAD_COUNT) * sizeof(Vertex4RGBA);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp
index 9981264..62b3012 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp
@@ -35,6 +35,7 @@
 #include "vkQueryUtil.hpp"
 #include "vkRef.hpp"
 #include "vkRefUtil.hpp"
+#include "vkTypeUtil.hpp"
 #include "tcuImageCompare.hpp"
 #include "deUniquePtr.hpp"
 #include "deStringUtil.hpp"
@@ -140,6 +141,7 @@
 	const tcu::UVec2					m_renderSize;
 	const VkFormat						m_colorFormat;
 	const VkFormat						m_depthFormat;
+	VkImageSubresourceRange				m_depthImageSubresourceRange;
 
 	Move<VkImage>						m_colorImage;
 	de::MovePtr<Allocation>				m_colorImageAlloc;
@@ -292,6 +294,10 @@
 		// Allocate and bind depth image memory
 		m_depthImageAlloc = memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *m_depthImage), MemoryRequirement::Any);
 		VK_CHECK(vk.bindImageMemory(vkDevice, *m_depthImage, m_depthImageAlloc->getMemory(), m_depthImageAlloc->getOffset()));
+
+		const VkImageAspectFlags aspect = (mapVkFormat(m_depthFormat).order == tcu::TextureFormat::DS ? VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT
+																									  : VK_IMAGE_ASPECT_DEPTH_BIT);
+		m_depthImageSubresourceRange    = makeImageSubresourceRange(aspect, 0u, depthImageParams.mipLevels, 0u, depthImageParams.arrayLayers);
 	}
 
 	// Create color attachment view
@@ -322,7 +328,7 @@
 			VK_IMAGE_VIEW_TYPE_2D,							// VkImageViewType			viewType;
 			m_depthFormat,									// VkFormat					format;
 			componentMappingRGBA,							// VkComponentMapping		components;
-			{ VK_IMAGE_ASPECT_DEPTH_BIT, 0u, 1u, 0u, 1u }	// VkImageSubresourceRange	subresourceRange;
+			m_depthImageSubresourceRange,					// VkImageSubresourceRange	subresourceRange;
 		};
 
 		m_depthAttachmentView = createImageView(vk, vkDevice, &depthAttachmentViewParams);
@@ -594,16 +600,6 @@
 			false,														// VkBool32									alphaToCoverageEnable;
 			false														// VkBool32									alphaToOneEnable;
 		};
-
-		const VkPipelineDynamicStateCreateInfo dynamicStateParams		=
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
-		};
-
 		VkPipelineDepthStencilStateCreateInfo depthStencilStateParams =
 		{
 			VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,	// VkStructureType							sType;
@@ -634,8 +630,8 @@
 				0u,						// deUint32		writeMask;
 				0u,						// deUint32		reference;
 			},
-			-1.0f,														// float			minDepthBounds;
-			+1.0f,														// float			maxDepthBounds;
+			0.0f,														// float			minDepthBounds;
+			1.0f,														// float			maxDepthBounds;
 		};
 
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -653,7 +649,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -747,9 +743,43 @@
 			attachmentClearValues									// const VkClearValue*	pClearValues;
 		};
 
+		const VkImageMemoryBarrier imageLayoutBarriers[] =
+		{
+			// color image layout transition
+			{
+				VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,									// VkStructureType            sType;
+				DE_NULL,																// const void*                pNext;
+				(VkAccessFlags)0,														// VkAccessFlags              srcAccessMask;
+				VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,									// VkAccessFlags              dstAccessMask;
+				VK_IMAGE_LAYOUT_UNDEFINED,												// VkImageLayout              oldLayout;
+				VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,								// VkImageLayout              newLayout;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   srcQueueFamilyIndex;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   dstQueueFamilyIndex;
+				*m_colorImage,															// VkImage                    image;
+				{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }							// VkImageSubresourceRange    subresourceRange;
+			},
+			// depth image layout transition
+			{
+				VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,									// VkStructureType            sType;
+				DE_NULL,																// const void*                pNext;
+				(VkAccessFlags)0,														// VkAccessFlags              srcAccessMask;
+				VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,							// VkAccessFlags              dstAccessMask;
+				VK_IMAGE_LAYOUT_UNDEFINED,												// VkImageLayout              oldLayout;
+				VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,						// VkImageLayout              newLayout;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   srcQueueFamilyIndex;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   dstQueueFamilyIndex;
+				*m_depthImage,															// VkImage                    image;
+				m_depthImageSubresourceRange,											// VkImageSubresourceRange    subresourceRange;
+			},
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		const VkDeviceSize		quadOffset		= (m_vertices.size() / DepthTest::QUAD_COUNT) * sizeof(Vertex4RGBA);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
index d799f42..7c12840 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
@@ -785,17 +785,8 @@
 				0u,						// deUint32		writeMask;
 				0u						// deUint32		reference;
 			},
-			-1.0f,														// float			minDepthBounds;
-			+1.0f														// float			maxDepthBounds;
-		};
-
-		const VkPipelineDynamicStateCreateInfo dynamicStateParams =
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
+			0.0f,														// float			minDepthBounds;
+			1.0f														// float			maxDepthBounds;
 		};
 
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -813,7 +804,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -899,9 +890,27 @@
 			&attachmentClearValue									// const VkClearValue*	pClearValues;
 		};
 
+		const VkImageMemoryBarrier preAttachmentBarrier =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,			// VkStructureType			sType;
+			DE_NULL,										// const void*				pNext;
+			0u,												// VkAccessFlags			srcAccessMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// VkAccessFlags			dstAccessMask;
+			VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout			oldLayout;
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		// VkImageLayout			newLayout;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					srcQueueFamilyIndex;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					dstQueueFamilyIndex;
+			*m_colorImage,									// VkImage					image;
+			{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }	// VkImageSubresourceRange	subresourceRange;
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, 1u, &preAttachmentBarrier);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
index 5d473d9..2636258 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
@@ -414,7 +414,7 @@
 		VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,			// VkStructureType			sType;
 		DE_NULL,										// const void*				pNext;
 		0u,												// VkAccessFlags			srcAccessMask;
-		0u,												// VkAccessFlags			dstAccessMask;
+		VK_ACCESS_TRANSFER_WRITE_BIT,					// VkAccessFlags			dstAccessMask;
 		VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout			oldLayout;
 		VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,			// VkImageLayout			newLayout;
 		VK_QUEUE_FAMILY_IGNORED,						// deUint32					srcQueueFamilyIndex;
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
index d37cd1f..61f5e40 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
@@ -1253,17 +1253,8 @@
 				0u,						// deUint32		writeMask;
 				0u,						// deUint32		reference;
 			},
-			-1.0f,														// float			minDepthBounds;
-			+1.0f														// float			maxDepthBounds;
-		};
-
-		const VkPipelineDynamicStateCreateInfo dynamicStateParams =
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
+			0.0f,														// float			minDepthBounds;
+			1.0f														// float			maxDepthBounds;
 		};
 
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -1281,7 +1272,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -1408,9 +1399,27 @@
 			&attachmentClearValue									// const VkClearValue*	pClearValues;
 		};
 
+		const VkImageMemoryBarrier attachmentLayoutBarrier =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,			// VkStructureType			sType;
+			DE_NULL,										// const void*				pNext;
+			0u,												// VkAccessFlags			srcAccessMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// VkAccessFlags			dstAccessMask;
+			VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout			oldLayout;
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		// VkImageLayout			newLayout;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					srcQueueFamilyIndex;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					dstQueueFamilyIndex;
+			*m_colorImage,									// VkImage					image;
+			{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },	// VkImageSubresourceRange	subresourceRange;
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		const VkDeviceSize vertexBufferOffset = 0;
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
index 912f482..aadec96 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
@@ -1614,15 +1614,6 @@
 			{ 0.0f, 0.0f, 0.0f, 0.0f }									// float										blendConstants[4];
 		};
 
-		const VkPipelineDynamicStateCreateInfo	dynamicStateParams		=
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
-		};
-
 		const VkPipelineDepthStencilStateCreateInfo depthStencilStateParams =
 		{
 			VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,	// VkStructureType							sType;
@@ -1653,8 +1644,8 @@
 				0u,						// deUint32		writeMask;
 				0u,						// deUint32		reference;
 			},
-			-1.0f,														// float			minDepthBounds;
-			+1.0f,														// float			maxDepthBounds;
+			0.0f,														// float			minDepthBounds;
+			1.0f,														// float			maxDepthBounds;
 		};
 
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -1672,7 +1663,7 @@
 			&m_multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -1765,9 +1756,43 @@
 			clearValues												// const VkClearValue*	pClearValues;
 		};
 
+		const VkImageMemoryBarrier imageLayoutBarriers[] =
+		{
+			// color attachment image
+			{
+				VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,			// VkStructureType			sType;
+				DE_NULL,										// const void*				pNext;
+				0u,												// VkAccessFlags			srcAccessMask;
+				VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// VkAccessFlags			dstAccessMask;
+				VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout			oldLayout;
+				VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		// VkImageLayout			newLayout;
+				VK_QUEUE_FAMILY_IGNORED,						// deUint32					srcQueueFamilyIndex;
+				VK_QUEUE_FAMILY_IGNORED,						// deUint32					dstQueueFamilyIndex;
+				*m_colorImage,									// VkImage					image;
+				{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },	// VkImageSubresourceRange	subresourceRange;
+			},
+			// resolve attachment image
+			{
+				VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,			// VkStructureType			sType;
+				DE_NULL,										// const void*				pNext;
+				0u,												// VkAccessFlags			srcAccessMask;
+				VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// VkAccessFlags			dstAccessMask;
+				VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout			oldLayout;
+				VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		// VkImageLayout			newLayout;
+				VK_QUEUE_FAMILY_IGNORED,						// deUint32					srcQueueFamilyIndex;
+				VK_QUEUE_FAMILY_IGNORED,						// deUint32					dstQueueFamilyIndex;
+				*m_resolveImage,								// VkImage					image;
+				{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },	// VkImageSubresourceRange	subresourceRange;
+			},
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		VkDeviceSize vertexBufferOffset = 0u;
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
index 618dc43..1e3e967 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
@@ -844,15 +844,6 @@
 			false														// VkBool32									alphaToOneEnable;
 		};
 
-		const VkPipelineDynamicStateCreateInfo dynamicStateParams		=
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
-		};
-
 		VkPipelineDepthStencilStateCreateInfo depthStencilStateParams =
 		{
 			VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,	// VkStructureType							sType;
@@ -883,8 +874,8 @@
 				0u,						// deUint32		stencilWriteMask;
 				0u,						// deUint32		stencilReference;
 			},
-			-1.0f,														// float			minDepthBounds;
-			+1.0f,														// float			maxDepthBounds;
+			0.0f,														// float			minDepthBounds;
+			1.0f,														// float			maxDepthBounds;
 		};
 
 		const VkPipelineTessellationStateCreateInfo tessellationStateParams =
@@ -910,7 +901,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -994,9 +985,27 @@
 			attachmentClearValues									// const VkClearValue*	pClearValues;
 		};
 
+		const VkImageMemoryBarrier attachmentLayoutBarrier =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,			// VkStructureType			sType;
+			DE_NULL,										// const void*				pNext;
+			0u,												// VkAccessFlags			srcAccessMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// VkAccessFlags			dstAccessMask;
+			VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout			oldLayout;
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		// VkImageLayout			newLayout;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					srcQueueFamilyIndex;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					dstQueueFamilyIndex;
+			*m_colorImage,									// VkImage					image;
+			{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },	// VkImageSubresourceRange	subresourceRange;
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		// update push constant
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
index fa57224..87a3a15 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
@@ -35,6 +35,7 @@
 #include "vkQueryUtil.hpp"
 #include "vkRef.hpp"
 #include "vkRefUtil.hpp"
+#include "vkTypeUtil.hpp"
 #include "tcuImageCompare.hpp"
 #include "deMemory.h"
 #include "deRandom.hpp"
@@ -143,6 +144,7 @@
 	const tcu::UVec2					m_renderSize;
 	const VkFormat						m_colorFormat;
 	const VkFormat						m_stencilFormat;
+	VkImageSubresourceRange				m_stencilImageSubresourceRange;
 
 	VkImageCreateInfo					m_colorImageCreateInfo;
 	Move<VkImage>						m_colorImage;
@@ -379,6 +381,10 @@
 		// Allocate and bind stencil image memory
 		m_stencilImageAlloc = memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *m_stencilImage), MemoryRequirement::Any);
 		VK_CHECK(vk.bindImageMemory(vkDevice, *m_stencilImage, m_stencilImageAlloc->getMemory(), m_stencilImageAlloc->getOffset()));
+
+		const VkImageAspectFlags aspect = (mapVkFormat(m_stencilFormat).order == tcu::TextureFormat::DS ? VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_DEPTH_BIT
+																										: VK_IMAGE_ASPECT_STENCIL_BIT);
+		m_stencilImageSubresourceRange  = makeImageSubresourceRange(aspect, 0u, stencilImageParams.mipLevels, 0u, stencilImageParams.arrayLayers);
 	}
 
 	// Create color attachment view
@@ -409,7 +415,7 @@
 			VK_IMAGE_VIEW_TYPE_2D,								// VkImageViewType			viewType;
 			m_stencilFormat,									// VkFormat					format;
 			componentMappingRGBA,								// VkComponentMapping		components;
-			{ VK_IMAGE_ASPECT_STENCIL_BIT, 0u, 1u, 0u, 1u },	// VkImageSubresourceRange	subresourceRange;
+			m_stencilImageSubresourceRange,						// VkImageSubresourceRange	subresourceRange;
 		};
 
 		m_stencilAttachmentView = createImageView(vk, vkDevice, &stencilAttachmentViewParams);
@@ -689,17 +695,8 @@
 			true,														// VkBool32									stencilTestEnable;
 			m_stencilOpStateFront,										// VkStencilOpState							front;
 			m_stencilOpStateBack,										// VkStencilOpState							back;
-			-1.0f,														// float									minDepthBounds;
-			+1.0f														// float									maxDepthBounds;
-		};
-
-		const VkPipelineDynamicStateCreateInfo dynamicStateParams =
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
+			0.0f,														// float									minDepthBounds;
+			1.0f														// float									maxDepthBounds;
 		};
 
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -717,7 +714,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -834,9 +831,43 @@
 			attachmentClearValues									// const VkClearValue*	pClearValues;
 		};
 
+		const VkImageMemoryBarrier imageLayoutBarriers[] =
+		{
+			// color image layout transition
+			{
+				VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,									// VkStructureType            sType;
+				DE_NULL,																// const void*                pNext;
+				(VkAccessFlags)0,														// VkAccessFlags              srcAccessMask;
+				VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,									// VkAccessFlags              dstAccessMask;
+				VK_IMAGE_LAYOUT_UNDEFINED,												// VkImageLayout              oldLayout;
+				VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,								// VkImageLayout              newLayout;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   srcQueueFamilyIndex;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   dstQueueFamilyIndex;
+				*m_colorImage,															// VkImage                    image;
+				{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }							// VkImageSubresourceRange    subresourceRange;
+			},
+			// stencil image layout transition
+			{
+				VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,									// VkStructureType            sType;
+				DE_NULL,																// const void*                pNext;
+				(VkAccessFlags)0,														// VkAccessFlags              srcAccessMask;
+				VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,							// VkAccessFlags              dstAccessMask;
+				VK_IMAGE_LAYOUT_UNDEFINED,												// VkImageLayout              oldLayout;
+				VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,						// VkImageLayout              newLayout;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   srcQueueFamilyIndex;
+				VK_QUEUE_FAMILY_IGNORED,												// uint32_t                   dstQueueFamilyIndex;
+				*m_stencilImage,														// VkImage                    image;
+				m_stencilImageSubresourceRange,											// VkImageSubresourceRange    subresourceRange;
+			},
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		const VkDeviceSize		quadOffset		= (m_vertices.size() / StencilTest::QUAD_COUNT) * sizeof(Vertex4RGBA);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
old mode 100755
new mode 100644
index 6dca81a..744c84a
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
@@ -513,15 +513,6 @@
 		VK_FALSE,                                                   // VkBool32                                 alphaToOneEnable;
 	};
 
-	const VkPipelineDynamicStateCreateInfo  dynamicStateParams      =
-	{
-		VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,       // VkStructureType                      sType;
-		DE_NULL,                                                    // const void*                          pNext;
-		0u,                                                         // VkPipelineDynamicStateCreateFlags    flags;
-		0u,                                                         // deUint32                             dynamicStateCount;
-		DE_NULL,                                                    // const VkDynamicState*                pDynamicStates;
-	};
-
 	VkPipelineDepthStencilStateCreateInfo depthStencilStateParams =
 	{
 		VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, // VkStructureType                          sType;
@@ -552,8 +543,8 @@
 			0u,                     // deUint32     writeMask;
 			0u,                     // deUint32     reference;
 		},
-		-1.0f,                                                      // float                                    minDepthBounds;
-		+1.0f,                                                      // float                                    maxDepthBounds;
+		0.0f,                                                      // float                                    minDepthBounds;
+		1.0f,                                                      // float                                    maxDepthBounds;
 	};
 
 	const VkPipelineTessellationStateCreateInfo*	pTessCreateInfo		= DE_NULL;
@@ -583,7 +574,7 @@
 		&multisampleStateParams,                            // const VkPipelineMultisampleStateCreateInfo*      pMultisampleState;
 		&depthStencilStateParams,                           // const VkPipelineDepthStencilStateCreateInfo*     pDepthStencilState;
 		&colorBlendStateParams,                             // const VkPipelineColorBlendStateCreateInfo*       pColorBlendState;
-		&dynamicStateParams,                                // const VkPipelineDynamicStateCreateInfo*          pDynamicState;
+		(const VkPipelineDynamicStateCreateInfo*)DE_NULL,   // const VkPipelineDynamicStateCreateInfo*          pDynamicState;
 		*m_pipelineLayout,                                  // VkPipelineLayout                                 layout;
 		renderPass,                                         // VkRenderPass                                     renderPass;
 		0u,                                                 // deUint32                                         subpass;
@@ -992,6 +983,7 @@
 	Move<VkImageView>                   m_depthAttachmentView;
 	Move<VkRenderPass>                  m_renderPass;
 	Move<VkFramebuffer>                 m_framebuffer;
+	VkImageMemoryBarrier				m_imageLayoutBarriers[2];
 
 	de::MovePtr<Allocation>             m_vertexBufferAlloc;
 	Move<VkBuffer>                      m_vertexBuffer;
@@ -1154,6 +1146,39 @@
 												  &m_depthImageAlloc);
 	}
 
+	// Set up image layout transition barriers
+	{
+		const VkImageMemoryBarrier colorImageBarrier =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType			sType;
+			DE_NULL,											// const void*				pNext;
+			0u,													// VkAccessFlags			srcAccessMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				// VkAccessFlags			dstAccessMask;
+			VK_IMAGE_LAYOUT_UNDEFINED,							// VkImageLayout			oldLayout;
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,			// VkImageLayout			newLayout;
+			VK_QUEUE_FAMILY_IGNORED,							// deUint32					srcQueueFamilyIndex;
+			VK_QUEUE_FAMILY_IGNORED,							// deUint32					dstQueueFamilyIndex;
+			*m_colorImage,										// VkImage					image;
+			{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },		// VkImageSubresourceRange	subresourceRange;
+		};
+		const VkImageMemoryBarrier depthImageBarrier =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType			sType;
+			DE_NULL,											// const void*				pNext;
+			0u,													// VkAccessFlags			srcAccessMask;
+			VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,		// VkAccessFlags			dstAccessMask;
+			VK_IMAGE_LAYOUT_UNDEFINED,							// VkImageLayout			oldLayout;
+			VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,	// VkImageLayout			newLayout;
+			VK_QUEUE_FAMILY_IGNORED,							// deUint32					srcQueueFamilyIndex;
+			VK_QUEUE_FAMILY_IGNORED,							// deUint32					dstQueueFamilyIndex;
+			*m_depthImage,										// VkImage					image;
+			{ VK_IMAGE_ASPECT_DEPTH_BIT, 0u, 1u, 0u, 1u },		// VkImageSubresourceRange	subresourceRange;
+		};
+
+		m_imageLayoutBarriers[0] = colorImageBarrier;
+		m_imageLayoutBarriers[1] = depthImageBarrier;
+	}
+
 	// Create color attachment view
 	{
 		const VkImageViewCreateInfo colorAttachmentViewParams =
@@ -1271,6 +1296,9 @@
 
 	VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
 
+	vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+		0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(m_imageLayoutBarriers), m_imageLayoutBarriers);
+
 	vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
 	vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
@@ -1340,13 +1368,16 @@
 
 	programCollection.glslSources.add("dummy_geo") << glu::GeometrySource(
 		"#version 450 \n"
-		"layout (triangles) in;\n"
-		"layout (triangle_strip, max_vertices = 3) out;\n"
+		"layout(triangles) in;\n"
+		"layout(triangle_strip, max_vertices = 3) out;\n"
+		"layout(location = 0) in highp vec4 in_vtxColor[];\n"
+		"layout(location = 0) out highp vec4 vtxColor;\n"
 		"void main (void)\n"
 		"{\n"
 		"  for(int ndx=0; ndx<3; ndx++)\n"
 		"  {\n"
 		"    gl_Position = gl_in[ndx].gl_Position;\n"
+		"    vtxColor    = in_vtxColor[ndx];\n"
 		"    EmitVertex();\n"
 		"  }\n"
 		"  EndPrimitive();\n"
@@ -1517,6 +1548,9 @@
 
 	VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
 
+	vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+		0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(m_imageLayoutBarriers), m_imageLayoutBarriers);
+
 	vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
 	vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp
index f23921b..167860e 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp
@@ -918,15 +918,6 @@
 			false														// VkBool32									alphaToOneEnable;
 		};
 
-		const VkPipelineDynamicStateCreateInfo	dynamicStateParams		=
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			0u,															// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
-		};
-
 		VkPipelineDepthStencilStateCreateInfo depthStencilStateParams =
 		{
 			VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,	// VkStructureType							sType;
@@ -957,8 +948,8 @@
 				0u,						// deUint32		writeMask;
 				0u,						// deUint32		reference;
 			},
-			-1.0f,														// float			minDepthBounds;
-			+1.0f,														// float			maxDepthBounds;
+			0.0f,														// float			minDepthBounds;
+			1.0f,														// float			maxDepthBounds;
 		};
 
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -976,7 +967,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			&depthStencilStateParams,							// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateParams,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -1062,9 +1053,27 @@
 			&attachmentClearValue									// const VkClearValue*	pClearValues;
 		};
 
+		const VkImageMemoryBarrier attachmentLayoutBarrier =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,			// VkStructureType			sType;
+			DE_NULL,										// const void*				pNext;
+			0u,												// VkAccessFlags			srcAccessMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// VkAccessFlags			dstAccessMask;
+			VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout			oldLayout;
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		// VkImageLayout			newLayout;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					srcQueueFamilyIndex;
+			VK_QUEUE_FAMILY_IGNORED,						// deUint32					dstQueueFamilyIndex;
+			*m_colorImage,									// VkImage					image;
+			{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },	// VkImageSubresourceRange	subresourceRange;
+		};
+
 		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
 		VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+			0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier);
+
 		vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
 		vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline);
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
index a5fade3..10e2bfd 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
@@ -1163,15 +1163,6 @@
 			{ 0.0f, 0.0f, 0.0f, 0.0f }										// float										blendConst[4];
 		};
 
-		const VkPipelineDynamicStateCreateInfo dynamicStateInfo =
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType									sType;
-			DE_NULL,													// const void*										pNext;
-			(VkPipelineDynamicStateCreateFlags)0,						// VkPipelineDynamicStateCreateFlags				flags;
-			0u,															// deUint32											dynamicStateCount;
-			DE_NULL														// const VkDynamicState*							pDynamicStates;
-		};
-
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
 		{
 			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	// VkStructureType									sType;
@@ -1187,7 +1178,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			DE_NULL,											// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateInfo,									// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*pipelineLayout,									// VkPipelineLayout									layout;
 			*renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
@@ -2594,15 +2585,6 @@
 			{ 0.0f, 0.0f, 0.0f, 0.0f }									// float										blendConst[4];
 		};
 
-		const VkPipelineDynamicStateCreateInfo dynamicStateInfo =
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType						sType;
-			DE_NULL,													// const void*							pNext;
-			(VkPipelineDynamicStateCreateFlags)0,						// VkPipelineDynamicStateCreateFlags	flags;
-			0u,															// deUint32								dynamicStateCount;
-			DE_NULL														// const VkDynamicState*				pDynamicStates;
-		};
-
 		const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
 		{
 			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	// VkStructureType									sType;
@@ -2618,7 +2600,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			DE_NULL,											// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateInfo,									// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*pipelineLayout,									// VkPipelineLayout									layout;
 			*renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp
index c5fe8af..07a1a97 100644
--- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp
+++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp
@@ -1171,7 +1171,7 @@
 			VK_ATTACHMENT_STORE_OP_STORE,						// VkAttachmentStoreOp			storeOp;
 			VK_ATTACHMENT_LOAD_OP_DONT_CARE,					// VkAttachmentLoadOp			stencilLoadOp;
 			VK_ATTACHMENT_STORE_OP_DONT_CARE,					// VkAttachmentStoreOp			stencilStoreOp;
-			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,			// VkImageLayout				initialLayout;
+			VK_IMAGE_LAYOUT_UNDEFINED,							// VkImageLayout				initialLayout;
 			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,			// VkImageLayout				finalLayout;
 		};
 
@@ -1436,15 +1436,6 @@
 			{ 0.0f, 0.0f, 0.0f, 0.0f },									// float										blendConst[4];
 		};
 
-		const VkPipelineDynamicStateCreateInfo			dynamicStateInfo			=
-		{
-			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType				sType;
-			DE_NULL,													// const void*					pNext;
-			(VkPipelineDynamicStateCreateFlags)0,
-			0u,															// deUint32						dynamicStateCount;
-			DE_NULL														// const VkDynamicState*		pDynamicStates;
-		};
-
 		const VkGraphicsPipelineCreateInfo				graphicsPipelineParams		=
 		{
 			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	// VkStructureType									sType;
@@ -1460,7 +1451,7 @@
 			&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 			DE_NULL,											// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 			&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-			&dynamicStateInfo,									// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 			*m_pipelineLayout,									// VkPipelineLayout									layout;
 			*m_renderPass,										// VkRenderPass										renderPass;
 			0u,													// deUint32											subpass;
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
index 50f6949..eb58bdc 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
@@ -5056,15 +5056,6 @@
 		&attBlendParams,											//	const VkPipelineColorBlendAttachmentState*	pAttachments;
 		{ 0.0f, 0.0f, 0.0f, 0.0f },									//	float										blendConst[4];
 	};
-	const VkPipelineDynamicStateCreateInfo	dynamicStateInfo		=
-	{
-		VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,	//	VkStructureType			sType;
-		DE_NULL,												//	const void*				pNext;
-		(VkPipelineDynamicStateCreateFlags)0,
-		0u,														//	deUint32				dynamicStateCount;
-		DE_NULL													//	const VkDynamicState*	pDynamicStates;
-	};
-
 	const VkPipelineTessellationStateCreateInfo	tessellationState	=
 	{
 		VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
@@ -5089,7 +5080,7 @@
 		&multisampleParams,										//	const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 		&depthStencilParams,									//	const VkPipelineDepthStencilStateCreateInfo*	pDepthStencilState;
 		&blendParams,											//	const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-		&dynamicStateInfo,										//	const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+		(const VkPipelineDynamicStateCreateInfo*)DE_NULL,		//	const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 		*pipelineLayout,										//	VkPipelineLayout								layout;
 		*renderPass,											//	VkRenderPass									renderPass;
 		0u,														//	deUint32										subpass;
diff --git a/external/vulkancts/modules/vulkan/ubo/vktUniformBlockCase.cpp b/external/vulkancts/modules/vulkan/ubo/vktUniformBlockCase.cpp
index 5583733..0313e56 100644
--- a/external/vulkancts/modules/vulkan/ubo/vktUniformBlockCase.cpp
+++ b/external/vulkancts/modules/vulkan/ubo/vktUniformBlockCase.cpp
@@ -1462,6 +1462,34 @@
 		&clearValue,									// const VkClearValue*	pClearValues;
 	};
 
+	// Add barrier for initializing image state 
+	{
+		const vk::VkImageMemoryBarrier  initializeBarrier =
+		{
+			vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,		// VkStructureType			sType;
+			DE_NULL,										// const void*				pNext
+			0,												// VVkAccessFlags			srcAccessMask;
+			vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,		// VkAccessFlags			dstAccessMask;
+			vk::VK_IMAGE_LAYOUT_UNDEFINED,					// VkImageLayout			oldLayout;
+			vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	// VkImageLayout			newLayout;
+			queueFamilyIndex,								// deUint32					srcQueueFamilyIndex;
+			queueFamilyIndex,								// deUint32					dstQueueFamilyIndex;
+			*colorImage,									// VkImage					image;
+			{
+				vk::VK_IMAGE_ASPECT_COLOR_BIT,			// VkImageAspectFlags	aspectMask;
+				0u,										// deUint32				baseMipLevel;
+				1u,										// deUint32				mipLevels;
+				0u,										// deUint32				baseArraySlice;
+				1u,										// deUint32				arraySize;
+			}												// VkImageSubresourceRange	subresourceRange
+		};
+
+		vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, (vk::VkDependencyFlags)0,
+			0, (const vk::VkMemoryBarrier*)DE_NULL,
+			0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+			1, &initializeBarrier);
+	}
+
 	vk.cmdBeginRenderPass(*cmdBuffer, &passBeginInfo, vk::VK_SUBPASS_CONTENTS_INLINE);
 
 	vk.cmdBindPipeline(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline);
@@ -1917,15 +1945,6 @@
 		{ 0.0f, 0.0f, 0.0f, 0.0f },									// float										blendConstants[4];
 	};
 
-	const VkPipelineDynamicStateCreateInfo			dynamicStateInfo			=
-	{
-		VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,	// VkStructureType						sType;
-		DE_NULL,												// const void*							pNext;
-		0u,														// VkPipelineDynamicStateCreateFlags	flags;
-		0u,														// deUint32								dynamicStateCount;
-		DE_NULL													// const VkDynamicState*				pDynamicStates;
-	};
-
 	const VkGraphicsPipelineCreateInfo				graphicsPipelineParams		=
 	{
 		VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	// VkStructureType									sType;
@@ -1941,7 +1960,7 @@
 		&multisampleStateParams,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 		DE_NULL,											// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
 		&colorBlendStateParams,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
-		&dynamicStateInfo,									// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+		(const VkPipelineDynamicStateCreateInfo*)DE_NULL,	// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
 		pipelineLayout,										// VkPipelineLayout									layout;
 		renderPass,											// VkRenderPass										renderPass;
 		0u,													// deUint32											subpass;
diff --git a/external/vulkancts/modules/vulkan/vktRenderPassTests.cpp b/external/vulkancts/modules/vulkan/vktRenderPassTests.cpp
index b5efc7f..3bb7a74 100644
--- a/external/vulkancts/modules/vulkan/vktRenderPassTests.cpp
+++ b/external/vulkancts/modules/vulkan/vktRenderPassTests.cpp
@@ -1672,14 +1672,6 @@
 		attachmentBlendStates.empty() ? DE_NULL : &attachmentBlendStates[0],// pAttachments
 		{ 0.0f, 0.0f, 0.0f, 0.0f }											// blendConst
 	};
-	const VkPipelineDynamicStateCreateInfo dynamicState =
-	{
-		VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
-		DE_NULL,
-		(VkPipelineDynamicStateCreateFlags)0u,
-		0,
-		DE_NULL
-	};
 	const VkGraphicsPipelineCreateInfo createInfo =
 	{
 		VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,		// sType
@@ -1697,7 +1689,7 @@
 		&multisampleState,										// pMultisampleState
 		&depthStencilState,										// pDepthStencilState
 		&blendState,											// pColorBlendState
-		&dynamicState,											// pDynamicState
+		(const VkPipelineDynamicStateCreateInfo*)DE_NULL,		// pDynamicState
 		pipelineLayout,											// layout
 
 		renderPass,												// renderPass
diff --git a/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp b/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp
index 0a39c3c..24b22a1 100644
--- a/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp
+++ b/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp
@@ -1193,14 +1193,6 @@
 		&attBlendParams,													// pAttachments
 		{ 0.0f, 0.0f, 0.0f, 0.0f },											// blendConstants
 	};
-	const vk::VkPipelineDynamicStateCreateInfo			dynStateParams			=
-	{
-		vk::VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,			// sType
-		DE_NULL,															// pNext
-		(vk::VkPipelineDynamicStateCreateFlags)0,
-		0u,																	// dynamicStateCount
-		DE_NULL,															// pDynamicStates
-	};
 	const vk::VkGraphicsPipelineCreateInfo				pipelineParams			=
 	{
 		vk::VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,				// sType
@@ -1216,7 +1208,7 @@
 		&multisampleParams,													// pMultisampleState
 		&depthStencilParams,												// pDepthStencilState
 		&blendParams,														// pColorBlendState
-		&dynStateParams,													// pDynamicState
+		(const vk::VkPipelineDynamicStateCreateInfo*)DE_NULL,				// pDynamicState
 		pipelineLayout,														// layout
 		renderPass,															// renderPass
 		0u,																	// subpass
diff --git a/framework/delibs/cmake/CFlags.cmake b/framework/delibs/cmake/CFlags.cmake
index ff25740..98f0252 100644
--- a/framework/delibs/cmake/CFlags.cmake
+++ b/framework/delibs/cmake/CFlags.cmake
@@ -49,6 +49,10 @@
 	set(CMAKE_C_FLAGS			"${CMAKE_C_FLAGS} ${TARGET_FLAGS} ${WARNING_FLAGS} -ansi -pedantic ")
 	set(CMAKE_CXX_FLAGS			"${CMAKE_CXX_FLAGS} ${TARGET_FLAGS} ${WARNING_FLAGS}")
 
+	# Force compiler to generate code where integers have well defined overflow
+	# Turn on -Wstrict-overflow=5 and check all warnings before removing
+	set(CMAKE_C_FLAGS			"${CMAKE_C_FLAGS} -fwrapv")
+	set(CMAKE_CXX_FLAGS			"${CMAKE_CXX_FLAGS} -fwrapv")
 elseif (DE_COMPILER_IS_MSC)
 	# Compiler flags for msc
 
diff --git a/framework/delibs/cmake/toolchain-android-r11.cmake b/framework/delibs/cmake/toolchain-android-r11.cmake
new file mode 100644
index 0000000..b74781e
--- /dev/null
+++ b/framework/delibs/cmake/toolchain-android-r11.cmake
@@ -0,0 +1,173 @@
+# Platform defines.
+set(CMAKE_SYSTEM_NAME Linux)
+
+set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
+
+set(CMAKE_CROSSCOMPILING 1)
+
+# NDK installation path
+if (NOT DEFINED ANDROID_NDK_PATH)
+	message(FATAL_ERROR "Please provide ANDROID_NDK_PATH")
+endif ()
+
+# Host os (for toolchain binaries)
+if (NOT DEFINED ANDROID_NDK_HOST_OS)
+	message(STATUS "Warning: ANDROID_NDK_HOST_OS is not set")
+	if (WIN32)
+		set(ANDROID_NDK_HOST_OS "windows")
+	elseif (UNIX)
+		set(ANDROID_NDK_HOST_OS "linux-86")
+	endif ()
+endif ()
+
+# Compile target
+set(ANDROID_ABI			"armeabi-v7a"			CACHE STRING "Android ABI")
+set(ANDROID_NDK_TARGET	"android-${DE_ANDROID_API}")
+
+# dE defines
+set(DE_OS "DE_OS_ANDROID")
+
+if (NOT DEFINED DE_COMPILER)
+	set(DE_COMPILER	"DE_COMPILER_CLANG")
+endif ()
+
+if (NOT DEFINED DE_ANDROID_API)
+	set(DE_ANDROID_API 9)
+endif ()
+
+set(COMMON_C_FLAGS		"-D__STDC_INT64__")
+set(COMMON_CXX_FLAGS	"${COMMON_C_FLAGS} -frtti -fexceptions")
+set(COMMON_LINKER_FLAGS	"")
+set(ARM_C_FLAGS			"-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ ")
+
+# ABI-dependent bits
+if (ANDROID_ABI STREQUAL "x86")
+	set(DE_CPU					"DE_CPU_X86")
+	set(CMAKE_SYSTEM_PROCESSOR	i686-android-linux)
+
+	set(ANDROID_CC_PATH			"${ANDROID_NDK_PATH}/toolchains/x86-4.9/prebuilt/${ANDROID_NDK_HOST_OS}/")
+	set(CROSS_COMPILE			"${ANDROID_CC_PATH}bin/i686-linux-android-")
+	set(ANDROID_SYSROOT			"${ANDROID_NDK_PATH}/platforms/${ANDROID_NDK_TARGET}/arch-x86")
+
+	set(CMAKE_FIND_ROOT_PATH
+		"${ANDROID_CC_PATH}i686-linux-android"
+		"${ANDROID_CC_PATH}lib/gcc/i686-linux-android/4.9"
+		)
+
+	set(TARGET_C_FLAGS			"-march=i686 -msse3 -mstackrealign -mfpmath=sse")
+	set(TARGET_LINKER_FLAGS		"")
+	set(LLVM_TRIPLE				"i686-none-linux-android")
+
+elseif (ANDROID_ABI STREQUAL "armeabi" OR
+		ANDROID_ABI STREQUAL "armeabi-v7a")
+	set(DE_CPU					"DE_CPU_ARM")
+	set(CMAKE_SYSTEM_PROCESSOR	arm-linux-androideabi)
+
+	set(ANDROID_CC_PATH	"${ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/${ANDROID_NDK_HOST_OS}/")
+	set(CROSS_COMPILE	"${ANDROID_CC_PATH}bin/arm-linux-androideabi-")
+	set(ANDROID_SYSROOT	"${ANDROID_NDK_PATH}/platforms/${ANDROID_NDK_TARGET}/arch-arm")
+
+	if (ANDROID_ABI STREQUAL "armeabi-v7a")
+		set(TARGET_C_FLAGS		"${ARM_C_FLAGS} -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp")
+		set(TARGET_LINKER_FLAGS	"-Wl,--fix-cortex-a8 -march=armv7-a")
+		set(LLVM_TRIPLE			"armv7-none-linux-androideabi")
+
+	else () # armeabi
+		set(TARGET_C_FLAGS		"${ARM_C_FLAGS} -march=armv5te -mfloat-abi=softfp")
+		set(TARGET_LINKER_FLAGS	"-Wl,--fix-cortex-a8 -march=armv5te")
+		set(LLVM_TRIPLE			"armv5te-none-linux-androideabi")
+	endif ()
+
+	set(CMAKE_FIND_ROOT_PATH
+		"${ANDROID_CC_PATH}arm-linux-androideabi"
+		)
+
+elseif (ANDROID_ABI STREQUAL "arm64-v8a")
+	set(DE_CPU					"DE_CPU_ARM_64")
+	set(CMAKE_SYSTEM_PROCESSOR	aarch64-linux-android)
+	set(CMAKE_SIZEOF_VOID_P		8)
+
+	set(ANDROID_CC_PATH	"${ANDROID_NDK_PATH}/toolchains/aarch64-linux-android-4.9/prebuilt/${ANDROID_NDK_HOST_OS}/")
+	set(CROSS_COMPILE	"${ANDROID_CC_PATH}bin/aarch64-linux-android-")
+	set(ANDROID_SYSROOT	"${ANDROID_NDK_PATH}/platforms/${ANDROID_NDK_TARGET}/arch-arm64")
+
+	set(CMAKE_FIND_ROOT_PATH
+		"${ANDROID_CC_PATH}arm-linux-androideabi"
+		)
+
+	set(TARGET_C_FLAGS		"-march=armv8-a")
+	set(TARGET_LINKER_FLAGS	"-Wl,--fix-cortex-a53-835769 -Wl,--fix-cortex-a53-835769 -march=armv8-a")
+	set(LLVM_TRIPLE			"aarch64-none-linux-android")
+
+	if (DE_COMPILER STREQUAL "DE_COMPILER_GCC")
+		set(TARGET_C_FLAGS "${TARGET_C_FLAGS} -mabi=lp64")
+	endif ()
+
+else ()
+	message(FATAL_ERROR "Unknown ABI \"${ANDROID_ABI}\"")
+endif ()
+
+# Use LLVM libc++ for full C++11 support
+set(ANDROID_CXX_LIBRARY		"${ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_static.a")
+set(CXX_INCLUDES			"-I${ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libcxx/include")
+set(CMAKE_FIND_ROOT_PATH	"" ${CMAKE_FIND_ROOT_PATH})
+
+set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ANDROID_SYSROOT})
+
+include(CMakeForceCompiler)
+
+if (DE_COMPILER STREQUAL "DE_COMPILER_GCC")
+	if (ANDROID_NDK_HOST_OS STREQUAL "linux-x86" OR
+		ANDROID_NDK_HOST_OS STREQUAL "linux-x86_64" OR
+		ANDROID_NDK_HOST_OS STREQUAL "darwin-x86")
+		cmake_force_c_compiler("${CROSS_COMPILE}gcc"		GNU)
+		cmake_force_cxx_compiler("${CROSS_COMPILE}g++"		GNU)
+	elseif (ANDROID_NDK_HOST_OS STREQUAL "windows")
+		cmake_force_c_compiler("${CROSS_COMPILE}gcc.exe"	GNU)
+		cmake_force_cxx_compiler("${CROSS_COMPILE}g++.exe"	GNU)
+	else ()
+		message(FATAL_ERROR "Unknown ANDROID_NDK_HOST_OS")
+	endif ()
+
+	set(TARGET_C_FLAGS		"-mandroid ${TARGET_C_FLAGS}")
+
+elseif (DE_COMPILER STREQUAL "DE_COMPILER_CLANG")
+	set(LLVM_PATH "${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/${ANDROID_NDK_HOST_OS}/")
+
+	if (ANDROID_NDK_HOST_OS STREQUAL "linux-x86" OR
+		ANDROID_NDK_HOST_OS STREQUAL "linux-x86_64" OR
+		ANDROID_NDK_HOST_OS STREQUAL "darwin-x86" OR
+		ANDROID_NDK_HOST_OS STREQUAL "darwin-x86_64")
+		cmake_force_c_compiler("${LLVM_PATH}bin/clang"			Clang)
+		cmake_force_cxx_compiler("${LLVM_PATH}bin/clang++"		Clang)
+		set(CMAKE_AR "${CROSS_COMPILE}ar" CACHE FILEPATH "Archiver")
+		set(CMAKE_RANLIB "${CROSS_COMPILE}ranlib" CACHE FILEPATH "Indexer")
+
+	elseif (ANDROID_NDK_HOST_OS STREQUAL "windows" OR
+			ANDROID_NDK_HOST_OS STREQUAL "windows-x86_64")
+		cmake_force_c_compiler("${LLVM_PATH}bin/clang.exe"		Clang)
+		cmake_force_cxx_compiler("${LLVM_PATH}bin/clang++.exe"	Clang)
+		set(CMAKE_AR "${CROSS_COMPILE}ar.exe" CACHE FILEPATH "Archiver")
+		set(CMAKE_RANLIB "${CROSS_COMPILE}ranlib.exe" CACHE FILEPATH "Indexer")
+
+	else ()
+		message(FATAL_ERROR "Unknown ANDROID_NDK_HOST_OS")
+	endif ()
+
+	set(TARGET_C_FLAGS		"-target ${LLVM_TRIPLE} -gcc-toolchain ${ANDROID_CC_PATH} ${TARGET_C_FLAGS}")
+	set(TARGET_LINKER_FLAGS	"-target ${LLVM_TRIPLE} -gcc-toolchain ${ANDROID_CC_PATH} ${TARGET_LINKER_FLAGS}")
+
+endif ()
+
+set(CMAKE_SHARED_LIBRARY_C_FLAGS	"")
+set(CMAKE_SHARED_LIBRARY_CXX_FLAGS	"")
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# \note Without CACHE STRING FORCE cmake ignores these.
+set(CMAKE_C_FLAGS				"--sysroot=${ANDROID_SYSROOT} ${COMMON_C_FLAGS} ${TARGET_C_FLAGS}" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS				"--sysroot=${ANDROID_SYSROOT} ${COMMON_CXX_FLAGS} ${TARGET_C_FLAGS} ${CXX_INCLUDES} -I${ANDROID_NDK_PATH}/sources/android/support/include" CACHE STRING "" FORCE)
+set(CMAKE_SHARED_LINKER_FLAGS	"-nodefaultlibs -Wl,-shared,-Bsymbolic -Wl,--no-undefined ${COMMON_LINKER_FLAGS} ${TARGET_LINKER_FLAGS}" CACHE STRING "" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS		"-nodefaultlibs ${COMMON_LINKER_FLAGS} ${TARGET_LINKER_FLAGS}" CACHE STRING "" FORCE)