aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobin Ehlis <tobine@google.com>2016-02-11 17:49:23 -0700
committerTobin Ehlis <tobine@google.com>2016-02-11 17:51:39 -0700
commitf07d955798b46fd594f09ad82d24ee358f0b25d3 (patch)
tree0421f008ab033fd612acad50d7ad6465a86be714
parent67eabc555e4137cf58d1dac9967a1d2d462355c6 (diff)
downloadusermoji-f07d955798b46fd594f09ad82d24ee358f0b25d3.tar.xz
demos: Fix a few layout transition bugs in cube
Re-enabled layout validation in draw_state revealed a few bugs in cube. This change fixes those bugs by starting tex image in PREINITIALIZED state with the HOST_WRITE_BIT set.
-rw-r--r--demos/cube.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/demos/cube.c b/demos/cube.c
index 51dae383..02e75a5a 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -483,7 +483,8 @@ static void demo_flush_init_cmd(struct demo *demo) {
static void demo_set_image_layout(struct demo *demo, VkImage image,
VkImageAspectFlags aspectMask,
VkImageLayout old_image_layout,
- VkImageLayout new_image_layout) {
+ VkImageLayout new_image_layout,
+ VkAccessFlagBits srcAccessMask) {
VkResult U_ASSERT_ONLY err;
if (demo->cmd == VK_NULL_HANDLE) {
@@ -521,7 +522,7 @@ static void demo_set_image_layout(struct demo *demo, VkImage image,
VkImageMemoryBarrier image_memory_barrier = {
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.pNext = NULL,
- .srcAccessMask = 0,
+ .srcAccessMask = srcAccessMask,
.dstAccessMask = 0,
.oldLayout = old_image_layout,
.newLayout = new_image_layout,
@@ -705,7 +706,8 @@ static void demo_draw(struct demo *demo) {
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);
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ 0);
demo_flush_init_cmd(demo);
// Wait for the present complete semaphore to be signaled to ensure
@@ -908,7 +910,8 @@ static void demo_prepare_buffers(struct demo *demo) {
// 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);
+ VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
+ 0);
color_image_view.image = demo->buffers[i].image;
@@ -987,7 +990,8 @@ static void demo_prepare_depth(struct demo *demo) {
demo_set_image_layout(demo, demo->depth.image, VK_IMAGE_ASPECT_DEPTH_BIT,
VK_IMAGE_LAYOUT_UNDEFINED,
- VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+ 0);
/* create image view */
view.image = demo->depth.image;
@@ -1076,6 +1080,7 @@ static void demo_prepare_texture_image(struct demo *demo, const char *filename,
.tiling = tiling,
.usage = usage,
.flags = 0,
+ .initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED,
};
VkMemoryRequirements mem_reqs;
@@ -1130,7 +1135,8 @@ 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_UNDEFINED, tex_obj->imageLayout);
+ 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 */
}
@@ -1179,12 +1185,14 @@ 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_TRANSFER_SRC_OPTIMAL);
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ 0);
demo_set_image_layout(demo, demo->textures[i].image,
VK_IMAGE_ASPECT_COLOR_BIT,
demo->textures[i].imageLayout,
- VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+ 0);
VkImageCopy copy_region = {
.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1},
@@ -1202,7 +1210,8 @@ static void demo_prepare_textures(struct demo *demo) {
demo_set_image_layout(demo, demo->textures[i].image,
VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
- demo->textures[i].imageLayout);
+ demo->textures[i].imageLayout,
+ 0);
demo_flush_init_cmd(demo);