diff options
| author | Jeremy Hayes <jeremy@lunarg.com> | 2016-10-25 17:32:23 -0600 |
|---|---|---|
| committer | Jeremy Hayes <jeremy@lunarg.com> | 2016-10-27 13:33:35 -0600 |
| commit | b0c86fa5130b49b5a9f19687cb25d3f20559ee0f (patch) | |
| tree | f9b3cd298ddfb9c72459631276659edbb6c5a149 /demos/cube.cpp | |
| parent | c2409a2fd8828f453deb8c0f95efdfedfbf9008d (diff) | |
| download | usermoji-b0c86fa5130b49b5a9f19687cb25d3f20559ee0f.tar.xz | |
demos: Add src and dst stages to set_image_layout
Change-Id: I97ba1643e17bb97faa868123f5ef6e6f140a9b13
Diffstat (limited to 'demos/cube.cpp')
| -rw-r--r-- | demos/cube.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/demos/cube.cpp b/demos/cube.cpp index a424f4d5..10878f29 100644 --- a/demos/cube.cpp +++ b/demos/cube.cpp @@ -1873,9 +1873,6 @@ struct Demo { } tex_obj->imageLayout = vk::ImageLayout::eShaderReadOnlyOptimal; - set_image_layout(tex_obj->image, vk::ImageAspectFlagBits::eColor, - vk::ImageLayout::ePreinitialized, tex_obj->imageLayout, - vk::AccessFlagBits::eHostWrite); } void prepare_textures() { @@ -1893,6 +1890,12 @@ struct Demo { vk::ImageUsageFlagBits::eSampled, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); + // Nothing in the pipeline needs to be complete to start, and don't allow fragment + // shader to run until layout transition completes + set_image_layout(textures[i].image, vk::ImageAspectFlagBits::eColor, + vk::ImageLayout::ePreinitialized, textures[i].imageLayout, + vk::AccessFlagBits::eHostWrite, vk::PipelineStageFlagBits::eTopOfPipe, + vk::PipelineStageFlagBits::eFragmentShader); } else if (props.optimalTilingFeatures & vk::FormatFeatureFlagBits::eSampledImage) { /* Must use staging buffer to copy linear texture to optimized @@ -1913,13 +1916,19 @@ struct Demo { set_image_layout( staging_texture.image, vk::ImageAspectFlagBits::eColor, - staging_texture.imageLayout, - vk::ImageLayout::eTransferSrcOptimal, vk::AccessFlagBits::eShaderRead); + vk::ImageLayout::ePreinitialized, + vk::ImageLayout::eTransferSrcOptimal, + vk::AccessFlagBits::eHostWrite, + vk::PipelineStageFlagBits::eTopOfPipe, + vk::PipelineStageFlagBits::eTransfer); set_image_layout( textures[i].image, vk::ImageAspectFlagBits::eColor, - textures[i].imageLayout, - vk::ImageLayout::eTransferDstOptimal, vk::AccessFlagBits::eShaderRead); + vk::ImageLayout::ePreinitialized, + vk::ImageLayout::eTransferDstOptimal, + vk::AccessFlagBits::eHostWrite, + vk::PipelineStageFlagBits::eTopOfPipe, + vk::PipelineStageFlagBits::eTransfer); auto const subresource = vk::ImageSubresourceLayers() @@ -1945,7 +1954,10 @@ struct Demo { set_image_layout(textures[i].image, vk::ImageAspectFlagBits::eColor, vk::ImageLayout::eTransferDstOptimal, - textures[i].imageLayout, vk::AccessFlagBits::eTransferWrite); + textures[i].imageLayout, + vk::AccessFlagBits::eTransferWrite, + vk::PipelineStageFlagBits::eTransfer, + vk::PipelineStageFlagBits::eFragmentShader); flush_init_cmd(); @@ -2084,7 +2096,9 @@ struct Demo { void set_image_layout(vk::Image image, vk::ImageAspectFlags aspectMask, vk::ImageLayout oldLayout, vk::ImageLayout newLayout, - vk::AccessFlags srcAccessMask) { + vk::AccessFlags srcAccessMask, + vk::PipelineStageFlags src_stages, + vk::PipelineStageFlags dest_stages) { if (!cmd) { auto const cmd = vk::CommandBufferAllocateInfo() .setCommandPool(cmd_pool) @@ -2145,10 +2159,8 @@ struct Demo { .setSubresourceRange(vk::ImageSubresourceRange( aspectMask, 0, 1, 0, 1)); - cmd.pipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, - vk::PipelineStageFlagBits::eTopOfPipe, - vk::DependencyFlagBits(), 0, nullptr, 0, nullptr, 1, - &barrier); + cmd.pipelineBarrier(src_stages, dest_stages, vk::DependencyFlagBits(), + 0, nullptr, 0, nullptr, 1, &barrier); } void update_data_buffer() { |
