From 5ff13184b8ee6a45e67f0ad95dd60553ce0b3a75 Mon Sep 17 00:00:00 2001 From: Tony Barbour Date: Wed, 19 Oct 2016 13:58:29 -0600 Subject: demos: Add src and dst stages to set_image_layout Change-Id: I70e70b8085cc1196b5ffb69283c158ea8bd7ec1b --- demos/cube.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index db2d1828..f52e1ea1 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -560,7 +560,9 @@ static void demo_set_image_layout(struct demo *demo, VkImage image, VkImageAspectFlags aspectMask, VkImageLayout old_image_layout, VkImageLayout new_image_layout, - VkAccessFlagBits srcAccessMask) { + VkAccessFlagBits srcAccessMask, + VkPipelineStageFlags src_stages, + VkPipelineStageFlags dest_stages) { VkResult U_ASSERT_ONLY err; if (demo->cmd == VK_NULL_HANDLE) { @@ -631,9 +633,6 @@ static void demo_set_image_layout(struct demo *demo, VkImage image, VkImageMemoryBarrier *pmemory_barrier = &image_memory_barrier; - VkPipelineStageFlags src_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; - VkPipelineStageFlags dest_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; - vkCmdPipelineBarrier(demo->cmd, src_stages, dest_stages, 0, 0, NULL, 0, NULL, 1, pmemory_barrier); } @@ -1310,11 +1309,6 @@ 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_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 */ } static void demo_destroy_texture_image(struct demo *demo, @@ -1343,6 +1337,12 @@ static void demo_prepare_textures(struct demo *demo) { VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + // Nothing in the pipeline needs to be complete to start, and don't allow fragment + // shader to run until layout transition completes + demo_set_image_layout(demo, demo->textures[i].image, VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_LAYOUT_PREINITIALIZED, demo->textures[i].imageLayout, + VK_ACCESS_HOST_WRITE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); } else if (props.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) { /* Must use staging buffer to copy linear texture to optimized */ @@ -1362,15 +1362,19 @@ 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_PREINITIALIZED, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - VK_ACCESS_SHADER_READ_BIT); + VK_ACCESS_HOST_WRITE_BIT, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT); demo_set_image_layout(demo, demo->textures[i].image, VK_IMAGE_ASPECT_COLOR_BIT, - demo->textures[i].imageLayout, + VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - VK_ACCESS_SHADER_READ_BIT); + VK_ACCESS_HOST_WRITE_BIT, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT); VkImageCopy copy_region = { .srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, @@ -1389,7 +1393,9 @@ static void demo_prepare_textures(struct demo *demo) { VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, demo->textures[i].imageLayout, - VK_ACCESS_TRANSFER_WRITE_BIT); + VK_ACCESS_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); demo_flush_init_cmd(demo); -- cgit v1.2.3