From f07d955798b46fd594f09ad82d24ee358f0b25d3 Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Thu, 11 Feb 2016 17:49:23 -0700 Subject: demos: Fix a few layout transition bugs in cube Re-enabled layout validation in draw_state revealed a few bugs in cube. This change fixes those bugs by starting tex image in PREINITIALIZED state with the HOST_WRITE_BIT set. --- demos/cube.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index 51dae383..02e75a5a 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -483,7 +483,8 @@ static void demo_flush_init_cmd(struct demo *demo) { static void demo_set_image_layout(struct demo *demo, VkImage image, VkImageAspectFlags aspectMask, VkImageLayout old_image_layout, - VkImageLayout new_image_layout) { + VkImageLayout new_image_layout, + VkAccessFlagBits srcAccessMask) { VkResult U_ASSERT_ONLY err; if (demo->cmd == VK_NULL_HANDLE) { @@ -521,7 +522,7 @@ static void demo_set_image_layout(struct demo *demo, VkImage image, VkImageMemoryBarrier image_memory_barrier = { .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, .pNext = NULL, - .srcAccessMask = 0, + .srcAccessMask = srcAccessMask, .dstAccessMask = 0, .oldLayout = old_image_layout, .newLayout = new_image_layout, @@ -705,7 +706,8 @@ static void demo_draw(struct demo *demo) { demo_set_image_layout(demo, demo->buffers[demo->current_buffer].image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + 0); demo_flush_init_cmd(demo); // Wait for the present complete semaphore to be signaled to ensure @@ -908,7 +910,8 @@ static void demo_prepare_buffers(struct demo *demo) { // to that state demo_set_image_layout( demo, demo->buffers[i].image, VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, + 0); color_image_view.image = demo->buffers[i].image; @@ -987,7 +990,8 @@ static void demo_prepare_depth(struct demo *demo) { demo_set_image_layout(demo, demo->depth.image, VK_IMAGE_ASPECT_DEPTH_BIT, VK_IMAGE_LAYOUT_UNDEFINED, - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, + 0); /* create image view */ view.image = demo->depth.image; @@ -1076,6 +1080,7 @@ static void demo_prepare_texture_image(struct demo *demo, const char *filename, .tiling = tiling, .usage = usage, .flags = 0, + .initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED, }; VkMemoryRequirements mem_reqs; @@ -1130,7 +1135,8 @@ static void demo_prepare_texture_image(struct demo *demo, const char *filename, tex_obj->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; demo_set_image_layout(demo, tex_obj->image, VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, tex_obj->imageLayout); + VK_IMAGE_LAYOUT_PREINITIALIZED, tex_obj->imageLayout, + VK_ACCESS_HOST_WRITE_BIT); /* setting the image layout does not reference the actual memory so no need * to add a mem ref */ } @@ -1179,12 +1185,14 @@ static void demo_prepare_textures(struct demo *demo) { demo_set_image_layout(demo, staging_texture.image, VK_IMAGE_ASPECT_COLOR_BIT, staging_texture.imageLayout, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + 0); demo_set_image_layout(demo, demo->textures[i].image, VK_IMAGE_ASPECT_COLOR_BIT, demo->textures[i].imageLayout, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 0); VkImageCopy copy_region = { .srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, @@ -1202,7 +1210,8 @@ static void demo_prepare_textures(struct demo *demo) { demo_set_image_layout(demo, demo->textures[i].image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - demo->textures[i].imageLayout); + demo->textures[i].imageLayout, + 0); demo_flush_init_cmd(demo); -- cgit v1.2.3