diff options
author | Jason Ekstrand <[email protected]> | 2018-01-13 10:45:55 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2018-02-20 13:49:25 -0800 |
commit | a4136b8c1a4533925af616d4920054c9734a265b (patch) | |
tree | e92674666fa0ae30f59060733e545a8e30e8fa44 /src/intel/vulkan/anv_pass.c | |
parent | bd356e1bcf5f481775ef26b0f8ad29a48cf6f685 (diff) |
anv/pass: Store usage in each subpass attachment
This requires us to ditch the VkAttachmentReference struct in favor of
an anv-specific struct. However, we can now easily identify from just
the subpass attachment what kind of an attachment it is. This will make
iteration over anv_subpass::attachments a little easier in some case.
Reviewed-by: Nanley Chery <[email protected]>
Diffstat (limited to 'src/intel/vulkan/anv_pass.c')
-rw-r--r-- | src/intel/vulkan/anv_pass.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/src/intel/vulkan/anv_pass.c b/src/intel/vulkan/anv_pass.c index a77e52b0c00..5b8b138ed94 100644 --- a/src/intel/vulkan/anv_pass.c +++ b/src/intel/vulkan/anv_pass.c @@ -65,7 +65,7 @@ VkResult anv_CreateRenderPass( anv_multialloc_add(&ma, &attachments, pCreateInfo->attachmentCount); anv_multialloc_add(&ma, &subpass_flushes, pCreateInfo->subpassCount + 1); - VkAttachmentReference *subpass_attachments; + struct anv_subpass_attachment *subpass_attachments; uint32_t subpass_attachment_count = 0; for (uint32_t i = 0; i < pCreateInfo->subpassCount; i++) { subpass_attachment_count += @@ -117,7 +117,11 @@ VkResult anv_CreateRenderPass( for (uint32_t j = 0; j < desc->inputAttachmentCount; j++) { uint32_t a = desc->pInputAttachments[j].attachment; - subpass->input_attachments[j] = desc->pInputAttachments[j]; + subpass->input_attachments[j] = (struct anv_subpass_attachment) { + .usage = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, + .attachment = desc->pInputAttachments[j].attachment, + .layout = desc->pInputAttachments[j].layout, + }; if (a != VK_ATTACHMENT_UNUSED) { has_input = true; pass->attachments[a].usage |= VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; @@ -138,7 +142,11 @@ VkResult anv_CreateRenderPass( for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) { uint32_t a = desc->pColorAttachments[j].attachment; - subpass->color_attachments[j] = desc->pColorAttachments[j]; + subpass->color_attachments[j] = (struct anv_subpass_attachment) { + .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, + .attachment = desc->pColorAttachments[j].attachment, + .layout = desc->pColorAttachments[j].layout, + }; if (a != VK_ATTACHMENT_UNUSED) { has_color = true; pass->attachments[a].usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; @@ -157,7 +165,11 @@ VkResult anv_CreateRenderPass( for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) { uint32_t a = desc->pResolveAttachments[j].attachment; - subpass->resolve_attachments[j] = desc->pResolveAttachments[j]; + subpass->resolve_attachments[j] = (struct anv_subpass_attachment) { + .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, + .attachment = desc->pResolveAttachments[j].attachment, + .layout = desc->pResolveAttachments[j].layout, + }; if (a != VK_ATTACHMENT_UNUSED) { subpass->has_resolve = true; uint32_t color_att = desc->pColorAttachments[j].attachment; @@ -174,8 +186,12 @@ VkResult anv_CreateRenderPass( if (desc->pDepthStencilAttachment) { uint32_t a = desc->pDepthStencilAttachment->attachment; - *subpass_attachments++ = subpass->depth_stencil_attachment = - *desc->pDepthStencilAttachment; + subpass->depth_stencil_attachment = (struct anv_subpass_attachment) { + .usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, + .attachment = desc->pDepthStencilAttachment->attachment, + .layout = desc->pDepthStencilAttachment->layout, + }; + *subpass_attachments++ = subpass->depth_stencil_attachment; if (a != VK_ATTACHMENT_UNUSED) { has_depth = true; pass->attachments[a].usage |= @@ -186,8 +202,11 @@ VkResult anv_CreateRenderPass( *desc->pDepthStencilAttachment); } } else { - subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED; - subpass->depth_stencil_attachment.layout = VK_IMAGE_LAYOUT_UNDEFINED; + subpass->depth_stencil_attachment = (struct anv_subpass_attachment) { + .usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, + .attachment = VK_ATTACHMENT_UNUSED, + .layout = VK_IMAGE_LAYOUT_UNDEFINED, + }; } } |