aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Barbour <tony@LunarG.com>2016-10-19 13:58:29 -0600
committerTony Barbour <tony@LunarG.com>2016-10-21 10:13:29 -0600
commit5ff13184b8ee6a45e67f0ad95dd60553ce0b3a75 (patch)
tree44935888589d91252247da955cabfba54eda2664
parent36b5fe4b3feca01f5dafda57dcf0d2bce0e0f9c5 (diff)
downloadusermoji-5ff13184b8ee6a45e67f0ad95dd60553ce0b3a75.tar.xz
demos: Add src and dst stages to set_image_layout
Change-Id: I70e70b8085cc1196b5ffb69283c158ea8bd7ec1b
-rw-r--r--demos/cube.c34
1 files 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);