mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 12:28:07 +02:00
vulkan/render_pass: handle maintenance10 resolve flags
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Acked-by: Alyssa Rosenzweig <alyssa.rosenzweig@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38045>
This commit is contained in:
parent
c5740c2548
commit
cf81feb660
2 changed files with 62 additions and 1 deletions
|
|
@ -341,6 +341,7 @@ vk_render_pass_attachment_init(struct vk_render_pass_attachment *att,
|
|||
{
|
||||
*att = (struct vk_render_pass_attachment) {
|
||||
.format = desc->format,
|
||||
.flags = desc->flags,
|
||||
.aspects = vk_format_aspects(desc->format),
|
||||
.samples = desc->samples,
|
||||
.view_mask = 0,
|
||||
|
|
@ -1032,6 +1033,17 @@ vk_get_command_buffer_inheritance_rendering_info(
|
|||
COMMAND_BUFFER_INHERITANCE_RENDERING_INFO);
|
||||
}
|
||||
|
||||
static VkRenderingAttachmentFlagBitsKHR
|
||||
vk_attachment_description_flags_to_rendering_flags(VkAttachmentDescriptionFlags flags)
|
||||
{
|
||||
VkRenderingAttachmentFlagBitsKHR ret = 0;
|
||||
if (flags & VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR)
|
||||
ret |= VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR;
|
||||
if (flags & VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR)
|
||||
ret |= VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR;
|
||||
return ret;
|
||||
}
|
||||
|
||||
const VkRenderingInfo *
|
||||
vk_get_command_buffer_inheritance_as_rendering_resume(
|
||||
VkCommandBufferLevel level,
|
||||
|
|
@ -1081,6 +1093,9 @@ vk_get_command_buffer_inheritance_as_rendering_resume(
|
|||
};
|
||||
|
||||
VkRenderingAttachmentInfo *attachments = data->attachments;
|
||||
VkRenderingAttachmentFlagsInfoKHR *attachments_flags = (VkRenderingAttachmentFlagsInfoKHR *)
|
||||
(data->attachments + subpass->color_count +
|
||||
2 * (subpass->depth_stencil_attachment != NULL));
|
||||
|
||||
for (unsigned i = 0; i < subpass->color_count; i++) {
|
||||
const struct vk_subpass_attachment *sp_att =
|
||||
|
|
@ -1094,8 +1109,16 @@ vk_get_command_buffer_inheritance_as_rendering_resume(
|
|||
}
|
||||
|
||||
assert(sp_att->attachment < pass->attachment_count);
|
||||
|
||||
attachments_flags[i] = (VkRenderingAttachmentFlagsInfoKHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR,
|
||||
.flags = vk_attachment_description_flags_to_rendering_flags(
|
||||
pass->attachments[sp_att->attachment].flags),
|
||||
};
|
||||
|
||||
attachments[i] = (VkRenderingAttachmentInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||
.pNext = &attachments_flags[i],
|
||||
.imageView = fb->attachments[sp_att->attachment],
|
||||
.imageLayout = sp_att->layout,
|
||||
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||
|
|
@ -1773,8 +1796,14 @@ load_attachment(struct vk_command_buffer *cmd_buffer,
|
|||
if (!need_load_store)
|
||||
return;
|
||||
|
||||
const VkRenderingAttachmentFlagsInfoKHR att_flags = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR,
|
||||
.flags = vk_attachment_description_flags_to_rendering_flags(rp_att->flags),
|
||||
};
|
||||
|
||||
const VkRenderingAttachmentInfo att = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||
.pNext = &att_flags,
|
||||
.imageView = vk_image_view_to_handle(att_state->image_view),
|
||||
.imageLayout = layout,
|
||||
.loadOp = rp_att->load_op,
|
||||
|
|
@ -1784,6 +1813,7 @@ load_attachment(struct vk_command_buffer *cmd_buffer,
|
|||
|
||||
const VkRenderingAttachmentInfo stencil_att = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||
.pNext = &att_flags,
|
||||
.imageView = vk_image_view_to_handle(att_state->image_view),
|
||||
.imageLayout = stencil_layout,
|
||||
.loadOp = rp_att->stencil_load_op,
|
||||
|
|
@ -1832,6 +1862,8 @@ begin_subpass(struct vk_command_buffer *cmd_buffer,
|
|||
* or quick vkCmdBegin/EndRendering to do the load op.
|
||||
*/
|
||||
|
||||
STACK_ARRAY(VkRenderingAttachmentFlagsInfoKHR, color_attachments_flags,
|
||||
subpass->color_count);
|
||||
STACK_ARRAY(VkRenderingAttachmentInfo, color_attachments,
|
||||
subpass->color_count);
|
||||
STACK_ARRAY(VkRenderingAttachmentInitialLayoutInfoMESA,
|
||||
|
|
@ -1841,6 +1873,8 @@ begin_subpass(struct vk_command_buffer *cmd_buffer,
|
|||
for (uint32_t i = 0; i < subpass->color_count; i++) {
|
||||
const struct vk_subpass_attachment *sp_att =
|
||||
&subpass->color_attachments[i];
|
||||
VkRenderingAttachmentFlagsInfoKHR *color_attachment_flags =
|
||||
&color_attachments_flags[i];
|
||||
VkRenderingAttachmentInfo *color_attachment = &color_attachments[i];
|
||||
|
||||
if (sp_att->attachment == VK_ATTACHMENT_UNUSED) {
|
||||
|
|
@ -1857,8 +1891,13 @@ begin_subpass(struct vk_command_buffer *cmd_buffer,
|
|||
struct vk_attachment_state *att_state =
|
||||
&cmd_buffer->attachments[sp_att->attachment];
|
||||
|
||||
*color_attachment_flags = (VkRenderingAttachmentFlagsInfoKHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR,
|
||||
};
|
||||
|
||||
*color_attachment = (VkRenderingAttachmentInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||
.pNext = color_attachment_flags,
|
||||
.imageView = vk_image_view_to_handle(att_state->image_view),
|
||||
.imageLayout = sp_att->layout,
|
||||
};
|
||||
|
|
@ -1934,6 +1973,9 @@ begin_subpass(struct vk_command_buffer *cmd_buffer,
|
|||
color_attachment->resolveImageView =
|
||||
vk_image_view_to_handle(res_att_state->image_view);
|
||||
color_attachment->resolveImageLayout = sp_att->resolve->layout;
|
||||
|
||||
color_attachment_flags->flags =
|
||||
vk_attachment_description_flags_to_rendering_flags(resolve_att->flags);
|
||||
} else if (subpass->mrtss.multisampledRenderToSingleSampledEnable &&
|
||||
rp_att->samples == VK_SAMPLE_COUNT_1_BIT) {
|
||||
if (vk_format_is_int(att_state->image_view->format))
|
||||
|
|
@ -1949,6 +1991,12 @@ begin_subpass(struct vk_command_buffer *cmd_buffer,
|
|||
VkRenderingAttachmentInfo stencil_attachment = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||
};
|
||||
VkRenderingAttachmentFlagsInfoKHR depth_attachment_flags = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR,
|
||||
};
|
||||
VkRenderingAttachmentFlagsInfoKHR stencil_attachment_flags = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR,
|
||||
};
|
||||
VkRenderingAttachmentInitialLayoutInfoMESA depth_initial_layout = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INITIAL_LAYOUT_INFO_MESA,
|
||||
};
|
||||
|
|
@ -1972,14 +2020,23 @@ begin_subpass(struct vk_command_buffer *cmd_buffer,
|
|||
depth_attachment.imageView =
|
||||
vk_image_view_to_handle(att_state->image_view);
|
||||
depth_attachment.imageLayout = sp_att->layout;
|
||||
depth_attachment_flags.flags =
|
||||
vk_attachment_description_flags_to_rendering_flags(rp_att->flags);
|
||||
}
|
||||
|
||||
if (rp_att->aspects & VK_IMAGE_ASPECT_STENCIL_BIT) {
|
||||
stencil_attachment.imageView =
|
||||
vk_image_view_to_handle(att_state->image_view);
|
||||
stencil_attachment.imageLayout = sp_att->stencil_layout;
|
||||
stencil_attachment_flags.flags =
|
||||
vk_attachment_description_flags_to_rendering_flags(rp_att->flags);
|
||||
}
|
||||
|
||||
__vk_append_struct(&depth_attachment,
|
||||
&depth_attachment_flags);
|
||||
__vk_append_struct(&stencil_attachment,
|
||||
&stencil_attachment_flags);
|
||||
|
||||
if (!(subpass->view_mask & att_state->views_loaded)) {
|
||||
/* None of these views have been used before */
|
||||
depth_attachment.loadOp = rp_att->load_op;
|
||||
|
|
|
|||
|
|
@ -178,6 +178,9 @@ struct vk_render_pass_attachment {
|
|||
/** VkAttachmentDescription2::format */
|
||||
VkFormat format;
|
||||
|
||||
/** VkAttachmentDescription2::flags */
|
||||
VkAttachmentDescriptionFlags flags;
|
||||
|
||||
/** Aspects contained in format */
|
||||
VkImageAspectFlags aspects;
|
||||
|
||||
|
|
@ -387,7 +390,8 @@ struct vk_gcbiarr_data {
|
|||
|
||||
#define VK_GCBIARR_DATA_SIZE(max_color_rts) (\
|
||||
sizeof(struct vk_gcbiarr_data) + \
|
||||
sizeof(VkRenderingAttachmentInfo) * ((max_color_rts) + 2) \
|
||||
sizeof(VkRenderingAttachmentInfo) * ((max_color_rts) + 2) + \
|
||||
sizeof(VkRenderingAttachmentFlagsInfoKHR) * ((max_color_rts) + 2) \
|
||||
)
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue