diff options
author | Jason Ekstrand <[email protected]> | 2016-11-14 17:18:47 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-11-22 13:44:55 -0800 |
commit | 3f1eda0b42eae5009a96b7f3c088b2d85eea44db (patch) | |
tree | 8c5e71fd8b99a18e20158f006133a61d2fd95ce0 | |
parent | 347f43c8ec54b1380d45a10c6ee38189ec6d73e9 (diff) |
anv/pass: Calculate the combined image usage of attachments
Reviewed-by: Jordan Justen <[email protected]>
-rw-r--r-- | src/intel/vulkan/anv_pass.c | 12 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 1 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/intel/vulkan/anv_pass.c b/src/intel/vulkan/anv_pass.c index a122f74cc69..1b40ef14670 100644 --- a/src/intel/vulkan/anv_pass.c +++ b/src/intel/vulkan/anv_pass.c @@ -70,6 +70,7 @@ VkResult anv_CreateRenderPass( att->format = pCreateInfo->pAttachments[i].format; att->samples = pCreateInfo->pAttachments[i].samples; + att->usage = 0; att->load_op = pCreateInfo->pAttachments[i].loadOp; att->store_op = pCreateInfo->pAttachments[i].storeOp; att->stencil_load_op = pCreateInfo->pAttachments[i].stencilLoadOp; @@ -113,6 +114,7 @@ VkResult anv_CreateRenderPass( for (uint32_t j = 0; j < desc->inputAttachmentCount; j++) { uint32_t a = desc->pInputAttachments[j].attachment; subpass->input_attachments[j] = a; + pass->attachments[a].usage |= VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; pass->attachments[a].subpass_usage[i] |= ANV_SUBPASS_USAGE_INPUT; } } @@ -124,6 +126,7 @@ VkResult anv_CreateRenderPass( for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) { uint32_t a = desc->pColorAttachments[j].attachment; subpass->color_attachments[j] = a; + pass->attachments[a].usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; pass->attachments[a].subpass_usage[i] |= ANV_SUBPASS_USAGE_DRAW; } } @@ -139,6 +142,10 @@ VkResult anv_CreateRenderPass( if (a != VK_ATTACHMENT_UNUSED) { subpass->has_resolve = true; uint32_t color_att = desc->pColorAttachments[j].attachment; + pass->attachments[color_att].usage |= + VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + pass->attachments[a].usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; + pass->attachments[color_att].subpass_usage[i] |= ANV_SUBPASS_USAGE_RESOLVE_SRC; pass->attachments[a].subpass_usage[i] |= @@ -150,8 +157,11 @@ VkResult anv_CreateRenderPass( if (desc->pDepthStencilAttachment) { uint32_t a = desc->pDepthStencilAttachment->attachment; subpass->depth_stencil_attachment = a; - if (a != VK_ATTACHMENT_UNUSED) + if (a != VK_ATTACHMENT_UNUSED) { + pass->attachments[a].usage |= + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; pass->attachments[a].subpass_usage[i] |= ANV_SUBPASS_USAGE_DRAW; + } } else { subpass->depth_stencil_attachment = VK_ATTACHMENT_UNUSED; } diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 7d7380a9d46..c7e44742e2e 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1722,6 +1722,7 @@ enum anv_subpass_usage { struct anv_render_pass_attachment { VkFormat format; uint32_t samples; + VkImageUsageFlags usage; VkAttachmentLoadOp load_op; VkAttachmentStoreOp store_op; VkAttachmentLoadOp stencil_load_op; |