aboutsummaryrefslogtreecommitdiff
path: root/demos/cube.cpp
diff options
context:
space:
mode:
authorJeremy Hayes <jeremy@lunarg.com>2016-10-25 17:32:23 -0600
committerJeremy Hayes <jeremy@lunarg.com>2016-10-27 13:33:35 -0600
commitb0c86fa5130b49b5a9f19687cb25d3f20559ee0f (patch)
treef9b3cd298ddfb9c72459631276659edbb6c5a149 /demos/cube.cpp
parentc2409a2fd8828f453deb8c0f95efdfedfbf9008d (diff)
downloadusermoji-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.cpp38
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() {