From db30e4bf5ce9219d675eac941477b5ae7af9e6d2 Mon Sep 17 00:00:00 2001 From: Tony Barbour Date: Tue, 11 Oct 2016 11:41:05 -0600 Subject: demos: Cube barrier changes from GH #1033 Change-Id: Ic68f9cd722474dc74957625c23c0f801f4b3852c --- demos/cube.c | 43 +++++++++++-------------------------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index 5a23657d..9477adbd 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -655,25 +655,7 @@ static void demo_draw_build_cmd(struct demo *demo, VkCommandBuffer cmd_buf) { err = vkBeginCommandBuffer(cmd_buf, &cmd_buf_info); assert(!err); - - VkImageMemoryBarrier image_memory_barrier = { - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = NULL, - .srcAccessMask = VK_ACCESS_MEMORY_READ_BIT, - .dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, - .oldLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, - .newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = demo->buffers[demo->current_buffer].image, - .subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; - - vkCmdPipelineBarrier(cmd_buf, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, 0, - NULL, 0, NULL, 1, &image_memory_barrier); - vkCmdBeginRenderPass(cmd_buf, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); - vkCmdBindPipeline(cmd_buf, VK_PIPELINE_BIND_POINT_GRAPHICS, demo->pipeline); vkCmdBindDescriptorSets(cmd_buf, VK_PIPELINE_BIND_POINT_GRAPHICS, demo->pipeline_layout, 0, 1, &demo->desc_set, 0, @@ -718,7 +700,7 @@ static void demo_draw_build_cmd(struct demo *demo, VkCommandBuffer cmd_buf) { vkCmdPipelineBarrier(cmd_buf, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, + VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, NULL, 0, NULL, 1, &image_ownership_barrier); } err = vkEndCommandBuffer(cmd_buf); @@ -1077,12 +1059,6 @@ static void demo_prepare_buffers(struct demo *demo) { &demo->buffers[i].view); assert(!err); - // The draw loop will be expecting the presentable images to be in - // LAYOUT_PRESENT_SRC_KHR - // since that's how they're left at the end of every frame. - demo_set_image_layout( - demo, demo->buffers[i].image, VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 0); } if (NULL != presentModes) { @@ -1153,11 +1129,6 @@ static void demo_prepare_depth(struct demo *demo) { vkBindImageMemory(demo->device, demo->depth.image, demo->depth.mem, 0); assert(!err); - demo_set_image_layout(demo, demo->depth.image, VK_IMAGE_ASPECT_DEPTH_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - 0); - /* create image view */ view.image = demo->depth.image; err = vkCreateImageView(demo->device, &view, NULL, &demo->depth.view); @@ -1579,6 +1550,14 @@ static void demo_prepare_descriptor_layout(struct demo *demo) { } static void demo_prepare_render_pass(struct demo *demo) { + // The initial layout for the color and depth attachments will be LAYOUT_UNDEFINED + // because at the start of the renderpass, we don't care about their contents. + // At the start of the subpass, the color attachment's layout will be transitioned + // to LAYOUT_COLOR_ATTACHMENT_OPTIMAL and the depth stencil attachment's layout + // will be transitioned to LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL. At the end of + // the renderpass, the color attachment's layout will be transitioned to + // LAYOUT_PRESENT_SRC_KHR to be ready to present. This is all done as part of + // the renderpass, no barriers are necessary. const VkAttachmentDescription attachments[2] = { [0] = { @@ -1588,7 +1567,7 @@ static void demo_prepare_render_pass(struct demo *demo) { .storeOp = VK_ATTACHMENT_STORE_OP_STORE, .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, - .initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, .finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, }, [1] = @@ -1600,7 +1579,7 @@ static void demo_prepare_render_pass(struct demo *demo) { .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, .initialLayout = - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_UNDEFINED, .finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, }, -- cgit v1.2.3