summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-11-14 17:18:47 -0800
committerJason Ekstrand <[email protected]>2016-11-22 13:44:55 -0800
commit3f1eda0b42eae5009a96b7f3c088b2d85eea44db (patch)
tree8c5e71fd8b99a18e20158f006133a61d2fd95ce0
parent347f43c8ec54b1380d45a10c6ee38189ec6d73e9 (diff)
anv/pass: Calculate the combined image usage of attachments
Reviewed-by: Jordan Justen <[email protected]>
-rw-r--r--src/intel/vulkan/anv_pass.c12
-rw-r--r--src/intel/vulkan/anv_private.h1
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;