radv: record if a render pass has depth/stencil resolve attachments

Only supported with vkCreateRenderPass2().

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Samuel Pitoiset
2019-05-20 11:47:02 +02:00
parent ac6369a2d0
commit e52ad9f845
2 changed files with 29 additions and 1 deletions
+26 -1
View File
@@ -91,6 +91,10 @@ radv_render_pass_compile(struct radv_render_pass *pass)
subpass->depth_stencil_attachment->attachment == VK_ATTACHMENT_UNUSED)
subpass->depth_stencil_attachment = NULL;
if (subpass->ds_resolve_attachment &&
subpass->ds_resolve_attachment->attachment == VK_ATTACHMENT_UNUSED)
subpass->ds_resolve_attachment = NULL;
for (uint32_t j = 0; j < subpass->attachment_count; j++) {
struct radv_subpass_attachment *subpass_att =
&subpass->attachments[j];
@@ -309,10 +313,15 @@ VkResult radv_CreateRenderPass(
static unsigned
radv_num_subpass_attachments2(const VkSubpassDescription2KHR *desc)
{
const VkSubpassDescriptionDepthStencilResolveKHR *ds_resolve =
vk_find_struct_const(desc->pNext,
SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR);
return desc->inputAttachmentCount +
desc->colorAttachmentCount +
(desc->pResolveAttachments ? desc->colorAttachmentCount : 0) +
(desc->pDepthStencilAttachment != NULL);
(desc->pDepthStencilAttachment != NULL) +
(ds_resolve && ds_resolve->pDepthStencilResolveAttachment);
}
VkResult radv_CreateRenderPass2KHR(
@@ -429,6 +438,22 @@ VkResult radv_CreateRenderPass2KHR(
.layout = desc->pDepthStencilAttachment->layout,
};
}
const VkSubpassDescriptionDepthStencilResolveKHR *ds_resolve =
vk_find_struct_const(desc->pNext,
SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR);
if (ds_resolve && ds_resolve->pDepthStencilResolveAttachment) {
subpass->ds_resolve_attachment = p++;
*subpass->ds_resolve_attachment = (struct radv_subpass_attachment) {
.attachment = ds_resolve->pDepthStencilResolveAttachment->attachment,
.layout = ds_resolve->pDepthStencilResolveAttachment->layout,
};
subpass->depth_resolve_mode = ds_resolve->depthResolveMode;
subpass->stencil_resolve_mode = ds_resolve->stencilResolveMode;
}
}
for (unsigned i = 0; i < pCreateInfo->dependencyCount; ++i) {
+3
View File
@@ -1953,6 +1953,9 @@ struct radv_subpass {
struct radv_subpass_attachment * color_attachments;
struct radv_subpass_attachment * resolve_attachments;
struct radv_subpass_attachment * depth_stencil_attachment;
struct radv_subpass_attachment * ds_resolve_attachment;
VkResolveModeFlagBitsKHR depth_resolve_mode;
VkResolveModeFlagBitsKHR stencil_resolve_mode;
/** Subpass has at least one color resolve attachment */
bool has_color_resolve;