diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
index aeef07f..5c7314d 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
@@ -1445,6 +1445,8 @@
 	VK_CHECK(vk.queueSubmit(queue, 1, &submitInfo, *m_fence));
 	VK_CHECK(vk.waitForFences(vkDevice, 1, &m_fence.get(), true, ~(0ull) /* infinity*/));
 
+	invalidateMappedMemoryRange(vk, vkDevice, m_outBufferAlloc->getMemory(), m_outBufferAlloc->getOffset(), (size_t)(sizeof(tcu::Vec4) * 8));
+
 	// verify result
 	std::vector<tcu::Vec4>	expectValue(8, tcu::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
 	if (deMemCmp((void*)(&expectValue[0]), m_outBufferAlloc->getHostPtr(), (size_t)(sizeof(tcu::Vec4) * 8)))
diff --git a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
index 7ac5fe3..fd5309e 100644
--- a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
+++ b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
@@ -2039,29 +2039,10 @@
 			mappedBlockPtrs = blockLocationsToPtrs(m_refLayout, blockLocations, mapPtrs);
 			copyData(m_refLayout, mappedBlockPtrs, m_refLayout, m_initialData.pointers);
 
-			if (m_bufferMode == SSBOLayoutCase::BUFFERMODE_PER_BLOCK)
+			for (size_t allocNdx = 0; allocNdx < m_uniformAllocs.size(); allocNdx++)
 			{
-				DE_ASSERT(m_uniformAllocs.size() == bufferSizes.size());
-				for (size_t allocNdx = 0; allocNdx < m_uniformAllocs.size(); allocNdx++)
-				{
-					const int size = bufferSizes[allocNdx];
-					vk::Allocation* alloc = m_uniformAllocs[allocNdx].get();
-					flushMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), size);
-				}
-			}
-			else
-			{
-				DE_ASSERT(m_bufferMode == SSBOLayoutCase::BUFFERMODE_SINGLE);
-				DE_ASSERT(m_uniformAllocs.size() == 1);
-				int totalSize = 0;
-				for (size_t bufferNdx = 0; bufferNdx < bufferSizes.size(); bufferNdx++)
-				{
-					totalSize += bufferSizes[bufferNdx];
-				}
-
-				DE_ASSERT(totalSize > 0);
-				vk::Allocation* alloc = m_uniformAllocs[0].get();
-				flushMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), totalSize);
+				vk::Allocation* alloc = m_uniformAllocs[allocNdx].get();
+				flushMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), VK_WHOLE_SIZE);
 			}
 		}
 	}
@@ -2216,6 +2197,8 @@
 		const int refCount = 1;
 		int resCount = 0;
 
+		invalidateMappedMemoryRange(vk, device, acBufferAlloc->getMemory(), acBufferAlloc->getOffset(), acBufferSize);
+
 		resCount = *(const int*)((const deUint8*)acBufferAlloc->getHostPtr());
 
 		counterOk = (refCount == resCount);
@@ -2225,6 +2208,12 @@
 		}
 	}
 
+	for (size_t allocNdx = 0; allocNdx < m_uniformAllocs.size(); allocNdx++)
+	{
+		vk::Allocation *alloc = m_uniformAllocs[allocNdx].get();
+		invalidateMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), VK_WHOLE_SIZE);
+	}
+
 	// Validate result
 	const bool compareOk = compareData(m_context.getTestContext().getLog(), m_refLayout, m_writeData.pointers, m_refLayout, mappedBlockPtrs);
 
