aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Barbour <tony@LunarG.com>2016-10-11 11:41:05 -0600
committerTony Barbour <tony@LunarG.com>2016-10-18 10:49:19 -0600
commitdb30e4bf5ce9219d675eac941477b5ae7af9e6d2 (patch)
treed9d0cadc91b0a597d44be2b7914728b780d79e0e
parent62f44ec31015061f223af1423711a06ab4e672ea (diff)
downloadusermoji-db30e4bf5ce9219d675eac941477b5ae7af9e6d2.tar.xz
demos: Cube barrier changes from GH #1033
Change-Id: Ic68f9cd722474dc74957625c23c0f801f4b3852c
-rw-r--r--demos/cube.c43
1 files 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,
},