diff --git a/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.cpp b/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.cpp
index 723706a..9569282 100644
--- a/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.cpp
@@ -277,9 +277,10 @@
 
 // DeterministicFailAllocator
 
-DeterministicFailAllocator::DeterministicFailAllocator (const VkAllocationCallbacks* allocator, deUint32 numPassingAllocs)
+DeterministicFailAllocator::DeterministicFailAllocator (const VkAllocationCallbacks* allocator, deUint32 numPassingAllocs, Mode initialMode)
 	: ChainedAllocator	(allocator)
 	, m_numPassingAllocs(numPassingAllocs)
+	, m_mode			(initialMode)
 	, m_allocationNdx	(0)
 {
 }
@@ -288,9 +289,15 @@
 {
 }
 
+void DeterministicFailAllocator::setMode (Mode mode)
+{
+	m_mode = mode;
+}
+
 void* DeterministicFailAllocator::allocate (size_t size, size_t alignment, VkSystemAllocationScope allocationScope)
 {
-	if (deAtomicIncrementUint32(&m_allocationNdx) <= m_numPassingAllocs)
+	if ((m_mode == MODE_DO_NOT_COUNT) ||
+		(deAtomicIncrementUint32(&m_allocationNdx) <= m_numPassingAllocs))
 		return ChainedAllocator::allocate(size, alignment, allocationScope);
 	else
 		return DE_NULL;
@@ -298,7 +305,8 @@
 
 void* DeterministicFailAllocator::reallocate (void* original, size_t size, size_t alignment, VkSystemAllocationScope allocationScope)
 {
-	if (deAtomicIncrementUint32(&m_allocationNdx) <= m_numPassingAllocs)
+	if ((m_mode == MODE_DO_NOT_COUNT) ||
+		(deAtomicIncrementUint32(&m_allocationNdx) <= m_numPassingAllocs))
 		return ChainedAllocator::reallocate(original, size, alignment, allocationScope);
 	else
 		return DE_NULL;
diff --git a/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.hpp b/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.hpp
index ecba532..63cabd8 100644
--- a/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.hpp
@@ -158,14 +158,26 @@
 class DeterministicFailAllocator : public ChainedAllocator
 {
 public:
-							DeterministicFailAllocator	(const VkAllocationCallbacks* allocator, deUint32 numPassingAllocs);
+	enum Mode
+	{
+		MODE_DO_NOT_COUNT = 0,	//!< Do not count allocations, all allocs will succeed
+		MODE_COUNT_AND_FAIL,	//!< Count allocations, fail when reaching alloc N
+
+		MODE_LAST
+	};
+
+							DeterministicFailAllocator	(const VkAllocationCallbacks* allocator, deUint32 numPassingAllocs, Mode initialMode);
 							~DeterministicFailAllocator	(void);
 
+	void					setMode						(Mode mode);
+
 	void*					allocate					(size_t size, size_t alignment, VkSystemAllocationScope allocationScope);
 	void*					reallocate					(void* original, size_t size, size_t alignment, VkSystemAllocationScope allocationScope);
 
 private:
 	const deUint32			m_numPassingAllocs;
+
+	Mode					m_mode;
 	volatile deUint32		m_allocationNdx;
 };
 
diff --git a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
index 5336d44..36eaee2 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
@@ -2326,7 +2326,9 @@
 		// Iterate over test until object allocation succeeds
 		for (; numPassingAllocs < maxTries; ++numPassingAllocs)
 		{
-			DeterministicFailAllocator			objAllocator(getSystemAllocator(), numPassingAllocs);
+			DeterministicFailAllocator			objAllocator(getSystemAllocator(),
+															 numPassingAllocs,
+															 DeterministicFailAllocator::MODE_COUNT_AND_FAIL);
 			AllocationCallbackRecorder			recorder	(objAllocator.getCallbacks(), 128);
 			const Environment					objEnv		(resEnv.env.vkp,
 															 resEnv.env.vkd,
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp
index 66db6e6..b74bda0 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp
@@ -230,7 +230,9 @@
 	for (deUint32 numPassingAllocs = 0; numPassingAllocs <= 1024u; ++numPassingAllocs)
 	{
 		AllocationCallbackRecorder	allocationRecorder	(getSystemAllocator());
-		DeterministicFailAllocator	failingAllocator	(allocationRecorder.getCallbacks(), numPassingAllocs);
+		DeterministicFailAllocator	failingAllocator	(allocationRecorder.getCallbacks(),
+														 numPassingAllocs,
+														 DeterministicFailAllocator::MODE_DO_NOT_COUNT);
 		bool						gotOOM				= false;
 
 		log << TestLog::Message << "Testing with " << numPassingAllocs << " first allocations succeeding" << TestLog::EndMessage;
@@ -238,6 +240,11 @@
 		try
 		{
 			const InstanceHelper		instHelper	(context, wsiType, failingAllocator.getCallbacks());
+
+			// OOM is not simulated for VkInstance as we don't want to spend time
+			// testing OOM paths inside instance creation.
+			failingAllocator.setMode(DeterministicFailAllocator::MODE_COUNT_AND_FAIL);
+
 			const NativeObjects			native		(context, instHelper.supportedExtensions, wsiType);
 			const Unique<VkSurfaceKHR>	surface		(createSurface(instHelper.vki,
 																   *instHelper.instance,
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
index 4de0915..d18c88a 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
@@ -607,7 +607,9 @@
 	if (m_numPassingAllocs <= 16*1024u)
 	{
 		AllocationCallbackRecorder	allocationRecorder	(getSystemAllocator());
-		DeterministicFailAllocator	failingAllocator	(allocationRecorder.getCallbacks(), m_numPassingAllocs);
+		DeterministicFailAllocator	failingAllocator	(allocationRecorder.getCallbacks(),
+														 m_numPassingAllocs,
+														 DeterministicFailAllocator::MODE_DO_NOT_COUNT);
 		bool						gotOOM				= false;
 
 		log << TestLog::Message << "Testing with " << m_numPassingAllocs << " first allocations succeeding" << TestLog::EndMessage;
@@ -625,6 +627,10 @@
 			const DeviceHelper						devHelper	(m_context, instHelper.vki, *instHelper.instance, *surface, failingAllocator.getCallbacks());
 			const vector<VkSwapchainCreateInfoKHR>	cases		(generateSwapchainParameterCases(m_params.wsiType, m_params.dimension, instHelper.vki, devHelper.physicalDevice, *surface));
 
+			// We don't care testing OOM paths in VkInstance, VkSurface, or VkDevice
+			// creation as they are tested elsewhere.
+			failingAllocator.setMode(DeterministicFailAllocator::MODE_COUNT_AND_FAIL);
+
 			for (size_t caseNdx = 0; caseNdx < cases.size(); ++caseNdx)
 			{
 				VkSwapchainCreateInfoKHR	curParams	= cases[caseNdx];
