Fix validation layer error for ClearImage benchmarks

An image layout transition is necessary before images can be used by
the device.

VUID-VkImageCreateInfo-initialLayout-00993 states that "initialLayout
must be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_PREINITIALIZED".

VUID-vkCmdClearColorImage-imageLayout-00005 states that
"imageLayout must be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
.K_IMAGE_LAYOUT_GENERAL"

Bug: b/158231104
Change-Id: I91859af9d6a5c8ed7c0e78eb068bc6d763ccde98
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/62210
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/tests/VulkanBenchmarks/ClearImageBenchmarks.cpp b/tests/VulkanBenchmarks/ClearImageBenchmarks.cpp
index 72a6db2..ed32677 100644
--- a/tests/VulkanBenchmarks/ClearImageBenchmarks.cpp
+++ b/tests/VulkanBenchmarks/ClearImageBenchmarks.cpp
@@ -14,9 +14,11 @@
 
 #include "Util.hpp"
 #include "VulkanTester.hpp"
+
 #include "benchmark/benchmark.h"
 
 #include <cassert>
+
 class ClearImageBenchmark
 {
 public:
@@ -30,7 +32,7 @@
 		imageInfo.imageType = vk::ImageType::e2D;
 		imageInfo.format = clearFormat;
 		imageInfo.tiling = vk::ImageTiling::eOptimal;
-		imageInfo.initialLayout = vk::ImageLayout::eGeneral;
+		imageInfo.initialLayout = vk::ImageLayout::eUndefined;
 		imageInfo.usage = vk::ImageUsageFlagBits::eTransferDst;
 		imageInfo.samples = vk::SampleCountFlagBits::e4;
 		imageInfo.extent = vk::Extent3D(1024, 1024, 1);
@@ -65,6 +67,16 @@
 
 		commandBuffer.begin(commandBufferBeginInfo);
 
+		vk::ImageMemoryBarrier imageMemoryBarrier;
+		imageMemoryBarrier.image = image;
+		imageMemoryBarrier.subresourceRange.aspectMask = clearAspect;
+		imageMemoryBarrier.subresourceRange.levelCount = VK_REMAINING_MIP_LEVELS;
+		imageMemoryBarrier.subresourceRange.layerCount = VK_REMAINING_ARRAY_LAYERS;
+		imageMemoryBarrier.oldLayout = vk::ImageLayout::eUndefined;
+		imageMemoryBarrier.newLayout = vk::ImageLayout::eGeneral;
+		commandBuffer.pipelineBarrier(vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTopOfPipe,
+		                              vk::DependencyFlagBits::eDeviceGroup, {}, {}, imageMemoryBarrier);
+
 		vk::ImageSubresourceRange range;
 		range.aspectMask = clearAspect;
 		range.baseMipLevel = 0;