tests: Clean up InvalidMemoryAliasing test

Make Vulkan more correct and prevent an extra re-bind error that wasn't
part of the test.
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 513037b..2d02ac6 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -1128,7 +1128,7 @@
         return;
     }
 
-    // VALDIATION FAILURE:
+    // VALIDATION FAILURE:
     err = vkBindImageMemory(m_device->device(), image, mem, 0);
     ASSERT_VK_SUCCESS(err);
 
@@ -1145,11 +1145,11 @@
     bool pass;
     ASSERT_NO_FATAL_FAILURE(InitState());
 
-    VkBuffer buffer;
+    VkBuffer buffer, buffer2;
     VkImage image;
     VkDeviceMemory mem;     // buffer will be bound first
     VkDeviceMemory mem_img; // image bound first
-    VkMemoryRequirements mem_reqs;
+    VkMemoryRequirements buff_mem_reqs, img_mem_reqs;
 
     VkBufferCreateInfo buf_info = {};
     buf_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
@@ -1163,31 +1163,7 @@
     err = vkCreateBuffer(m_device->device(), &buf_info, NULL, &buffer);
     ASSERT_VK_SUCCESS(err);
 
-    vkGetBufferMemoryRequirements(m_device->device(), buffer, &mem_reqs);
-    VkMemoryAllocateInfo alloc_info = {};
-    alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
-    alloc_info.pNext = NULL;
-    alloc_info.memoryTypeIndex = 0;
-
-    // Ensure memory is big enough for both bindings
-    alloc_info.allocationSize = 0x10000;
-    pass = m_device->phy().set_memory_type(mem_reqs.memoryTypeBits, &alloc_info,
-                                           VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
-    if (!pass) {
-        vkDestroyBuffer(m_device->device(), buffer, NULL);
-        return;
-    }
-    err = vkAllocateMemory(m_device->device(), &alloc_info, NULL, &mem);
-    ASSERT_VK_SUCCESS(err);
-
-    uint8_t *pData;
-    err = vkMapMemory(m_device->device(), mem, 0, mem_reqs.size, 0,
-                      (void **)&pData);
-    ASSERT_VK_SUCCESS(err);
-    memset(pData, 0xCADECADE, static_cast<size_t>(mem_reqs.size));
-    vkUnmapMemory(m_device->device(), mem);
-    err = vkBindBufferMemory(m_device->device(), buffer, mem, 0);
-    ASSERT_VK_SUCCESS(err);
+    vkGetBufferMemoryRequirements(m_device->device(), buffer, &buff_mem_reqs);
 
     VkImageCreateInfo image_create_info = {};
     image_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
@@ -1208,44 +1184,51 @@
     image_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
     image_create_info.flags = 0;
 
-    VkMemoryAllocateInfo mem_alloc = {};
-    mem_alloc.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
-    mem_alloc.pNext = NULL;
-    mem_alloc.allocationSize = 0;
-    mem_alloc.memoryTypeIndex = 0;
-
-    /* Create a mappable image.  It will be the texture if linear images are ok
-    * to be textures or it will be the staging image if they are not.
-    */
     err = vkCreateImage(m_device->device(), &image_create_info, NULL, &image);
     ASSERT_VK_SUCCESS(err);
 
-    vkGetImageMemoryRequirements(m_device->device(), image, &mem_reqs);
-    mem_alloc.allocationSize = mem_reqs.size;
-    pass = m_device->phy().set_memory_type(mem_reqs.memoryTypeBits, &mem_alloc,
-                                           VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
+    vkGetImageMemoryRequirements(m_device->device(), image, &img_mem_reqs);
+
+    VkMemoryAllocateInfo alloc_info = {};
+    alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
+    alloc_info.pNext = NULL;
+    alloc_info.memoryTypeIndex = 0;
+    // Ensure memory is big enough for both bindings
+    alloc_info.allocationSize = buff_mem_reqs.size + img_mem_reqs.size;
+    pass = m_device->phy().set_memory_type(
+        buff_mem_reqs.memoryTypeBits | img_mem_reqs.memoryTypeBits, &alloc_info,
+        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
     if (!pass) {
+        vkDestroyBuffer(m_device->device(), buffer, NULL);
         vkDestroyImage(m_device->device(), image, NULL);
         return;
     }
+    err = vkAllocateMemory(m_device->device(), &alloc_info, NULL, &mem);
+    ASSERT_VK_SUCCESS(err);
+    err = vkBindBufferMemory(m_device->device(), buffer, mem, 0);
+    ASSERT_VK_SUCCESS(err);
+
     m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT,
                                          " is aliased with buffer 0x");
-    // VALDIATION FAILURE due to image mapping overlapping buffer mapping
+    // VALIDATION FAILURE due to image mapping overlapping buffer mapping
     err = vkBindImageMemory(m_device->device(), image, mem, 0);
     m_errorMonitor->VerifyFound();
 
     // Now correctly bind image to second mem allocation before incorrectly
-    // aliasing buffer
+    // aliasing buffer2
+    err = vkCreateBuffer(m_device->device(), &buf_info, NULL, &buffer2);
+    ASSERT_VK_SUCCESS(err);
     err = vkAllocateMemory(m_device->device(), &alloc_info, NULL, &mem_img);
     ASSERT_VK_SUCCESS(err);
     err = vkBindImageMemory(m_device->device(), image, mem_img, 0);
     ASSERT_VK_SUCCESS(err);
     m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT,
                                          " is aliased with image 0x");
-    err = vkBindBufferMemory(m_device->device(), buffer, mem_img, 0);
+    err = vkBindBufferMemory(m_device->device(), buffer2, mem_img, 0);
     m_errorMonitor->VerifyFound();
 
     vkDestroyBuffer(m_device->device(), buffer, NULL);
+    vkDestroyBuffer(m_device->device(), buffer2, NULL);
     vkDestroyImage(m_device->device(), image, NULL);
     vkFreeMemory(m_device->device(), mem, NULL);
     vkFreeMemory(m_device->device(), mem_img, NULL);