diff --git a/examples/texturesparseresidency/texturesparseresidency.cpp b/examples/texturesparseresidency/texturesparseresidency.cpp
index a67c834d987803e1e04659413898606567bd52f4..0875a6ecfd25d3b926bea884575a50c189605e0a 100644
--- a/examples/texturesparseresidency/texturesparseresidency.cpp
+++ b/examples/texturesparseresidency/texturesparseresidency.cpp
@@ -195,7 +195,7 @@ void VulkanExample::prepareSparseTexture(uint32_t width, uint32_t height, uint32
 	texture.device = vulkanDevice->logicalDevice;
 	texture.width = width;
 	texture.height = height;
-	texture.mipLevels = floor(log2(std::max(width, height))) + 1;
+	texture.mipLevels = static_cast<uint32_t>(floor(log2(std::max(width, height))) + 1);
 	texture.layerCount = layerCount;
 	texture.format = format;
 
@@ -708,24 +708,12 @@ void VulkanExample::render()
 	}
 }
 
-void VulkanExample::uploadContent(VirtualTexturePage page, VkImage image)
+// Fills a buffer with random colors
+void VulkanExample::randomPattern(uint8_t* buffer, uint32_t width, uint32_t height)
 {
-	// Generate some random image data and upload as a buffer
-	const size_t bufferSize = 4 * page.extent.width * page.extent.height;
-
-	vks::Buffer imageBuffer;
-	VK_CHECK_RESULT(vulkanDevice->createBuffer(
-		VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
-		VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
-		&imageBuffer,
-		bufferSize));
-	imageBuffer.map();
-
-	// Fill buffer with random colors
 	std::random_device rd;
 	std::mt19937 rndEngine(rd());
 	std::uniform_int_distribution<uint32_t> rndDist(0, 255);
-	uint8_t* data = (uint8_t*)imageBuffer.mapped;
 	uint8_t rndVal[4] = { 0, 0, 0, 0 };
 	while (rndVal[0] + rndVal[1] + rndVal[2] < 10) {
 		rndVal[0] = (uint8_t)rndDist(rndEngine);
@@ -733,17 +721,30 @@ void VulkanExample::uploadContent(VirtualTexturePage page, VkImage image)
 		rndVal[2] = (uint8_t)rndDist(rndEngine);
 	}
 	rndVal[3] = 255;
-
-	for (uint32_t y = 0; y < page.extent.height; y++)
-	{
-		for (uint32_t x = 0; x < page.extent.width; x++)
-		{
-			for (uint32_t c = 0; c < 4; c++, ++data)
-			{
-				*data = rndVal[c];
+	for (uint32_t y = 0; y < height; y++) {
+		for (uint32_t x = 0; x < width; x++) {
+			for (uint32_t c = 0; c < 4; c++, ++buffer) {
+				*buffer = rndVal[c];
 			}
 		}
 	}
+}
+
+void VulkanExample::uploadContent(VirtualTexturePage page, VkImage image)
+{
+	// Generate some random image data and upload as a buffer
+	const size_t bufferSize = 4 * page.extent.width * page.extent.height;
+
+	vks::Buffer imageBuffer;
+	VK_CHECK_RESULT(vulkanDevice->createBuffer(
+		VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
+		VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
+		&imageBuffer,
+		bufferSize));
+	imageBuffer.map();
+
+	uint8_t* data = (uint8_t*)imageBuffer.mapped;
+	randomPattern(data, page.extent.height, page.extent.width);
 
 	VkCommandBuffer copyCmd = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
 	vks::tools::setImageLayout(copyCmd, image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, texture.subRange, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
@@ -821,7 +822,6 @@ void VulkanExample::fillMipTail()
 
 		const uint32_t width = std::max(texture.width >> i, 1u);
 		const uint32_t height = std::max(texture.height >> i, 1u);
-		const uint32_t depth = 1;
 
 		// Generate some random image data and upload as a buffer
 		const size_t bufferSize = 4 * width * height;
@@ -839,36 +839,7 @@ void VulkanExample::fillMipTail()
 		std::mt19937 rndEngine(rd());
 		std::uniform_int_distribution<uint32_t> rndDist(0, 255);
 		uint8_t* data = (uint8_t*)imageBuffer.mapped;
-		uint8_t rndVal[4] = { 0, 0, 0, 0 };
-		while (rndVal[0] + rndVal[1] + rndVal[2] < 10) {
-			rndVal[0] = (uint8_t)rndDist(rndEngine);
-			rndVal[1] = (uint8_t)rndDist(rndEngine);
-			rndVal[2] = (uint8_t)rndDist(rndEngine);
-		}
-		rndVal[3] = 255;
-
-		switch (mipLevel) {
-		case 0:
-			rndVal[0] = rndVal[1] = rndVal[2] = 255;
-			break;
-		case 1:
-			rndVal[0] = rndVal[1] = rndVal[2] = 200;
-			break;
-		case 2:
-			rndVal[0] = rndVal[1] = rndVal[2] = 150;
-			break;
-		}
-
-		for (uint32_t y = 0; y < height; y++)
-		{
-			for (uint32_t x = 0; x < width; x++)
-			{
-				for (uint32_t c = 0; c < 4; c++, ++data)
-				{
-					*data = rndVal[c];
-				}
-			}
-		}
+		randomPattern(data, width, height);
 
 		VkCommandBuffer copyCmd = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
 		vks::tools::setImageLayout(copyCmd, texture.image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, texture.subRange, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
@@ -877,7 +848,7 @@ void VulkanExample::fillMipTail()
 		region.imageSubresource.layerCount = 1;
 		region.imageSubresource.mipLevel = i;
 		region.imageOffset = {};
-		region.imageExtent = { width, height, depth };
+		region.imageExtent = { width, height, 1 };
 		vkCmdCopyBufferToImage(copyCmd, imageBuffer.buffer, texture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
 		vks::tools::setImageLayout(copyCmd, texture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, texture.subRange, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
 		vulkanDevice->flushCommandBuffer(copyCmd, queue);
diff --git a/examples/texturesparseresidency/texturesparseresidency.h b/examples/texturesparseresidency/texturesparseresidency.h
index 386edfd8d1ab32dbdc112a05ef156970005c1c57..e061dc9e7916e7034adad8241f477f4875fafd8d 100644
--- a/examples/texturesparseresidency/texturesparseresidency.h
+++ b/examples/texturesparseresidency/texturesparseresidency.h
@@ -101,6 +101,7 @@ public:
 	~VulkanExample();
 	virtual void getEnabledFeatures();
 	glm::uvec3 alignedDivision(const VkExtent3D& extent, const VkExtent3D& granularity);
+	void randomPattern(uint8_t* buffer, uint32_t width, uint32_t height);
 	void prepareSparseTexture(uint32_t width, uint32_t height, uint32_t layerCount, VkFormat format);
 	// @todo: move to dtor of texture
 	void destroyTextureImage(SparseTexture texture);