aboutsummaryrefslogtreecommitdiff
path: root/demos/cube.c
diff options
context:
space:
mode:
authorTony Barbour <tony@LunarG.com>2016-04-26 11:13:48 -0600
committerTony Barbour <tony@LunarG.com>2016-04-27 13:56:09 -0600
commit5c5b163a9fef143d17865cd3cbaa078bad1b8fbc (patch)
tree5ca35881729222d253c036d4c49c04c63fa0f317 /demos/cube.c
parentbe4a81d56a0be26f1d9dc61b733eb997b50e8813 (diff)
downloadusermoji-5c5b163a9fef143d17865cd3cbaa078bad1b8fbc.tar.xz
demos: Acquire WSI image before changing layout
Change-Id: I1606bd92bcabb40156f8745b58596ae8f1ec429d
Diffstat (limited to 'demos/cube.c')
-rw-r--r--demos/cube.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/demos/cube.c b/demos/cube.c
index cd2c8f47..f2fd096a 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -602,13 +602,30 @@ static void demo_draw_build_cmd(struct demo *demo, VkCommandBuffer cmd_buf) {
err = vkBeginCommandBuffer(cmd_buf, &cmd_buf_info);
assert(!err);
+ // We can use LAYOUT_UNDEFINED as a wildcard here because we don't care what
+ // happens to the previous contents of the image
+ VkImageMemoryBarrier image_memory_barrier = {
+ .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+ .pNext = NULL,
+ .srcAccessMask = 0,
+ .dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
+ .oldLayout = VK_IMAGE_LAYOUT_UNDEFINED,
+ .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_ALL_COMMANDS_BIT,
+ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_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,
NULL);
-
VkViewport viewport;
memset(&viewport, 0, sizeof(viewport));
viewport.height = (float)demo->height;
@@ -624,7 +641,6 @@ static void demo_draw_build_cmd(struct demo *demo, VkCommandBuffer cmd_buf) {
scissor.offset.x = 0;
scissor.offset.y = 0;
vkCmdSetScissor(cmd_buf, 0, 1, &scissor);
-
vkCmdDraw(cmd_buf, 12 * 3, 1, 0, 0);
vkCmdEndRenderPass(cmd_buf);
@@ -706,13 +722,6 @@ static void demo_draw(struct demo *demo) {
assert(!err);
}
- // Assume the command buffer has been run on current_buffer before so
- // we need to set the image layout back to COLOR_ATTACHMENT_OPTIMAL
- 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,
- 0);
demo_flush_init_cmd(demo);
// Wait for the present complete semaphore to be signaled to ensure
@@ -720,7 +729,6 @@ static void demo_draw(struct demo *demo) {
// engine has fully released ownership to the application, and it is
// okay to render to the image.
- // FIXME/TODO: DEAL WITH VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
VkPipelineStageFlags pipe_stage_flags =
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
VkSubmitInfo submit_info = {.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
@@ -909,15 +917,6 @@ static void demo_prepare_buffers(struct demo *demo) {
demo->buffers[i].image = swapchainImages[i];
- // Render loop will expect image to have been used before and in
- // VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
- // layout and will change to COLOR_ATTACHMENT_OPTIMAL, so init the image
- // 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,
- 0);
-
color_image_view.image = demo->buffers[i].image;
err = vkCreateImageView(demo->device, &color_image_view, NULL,