From 7bf9e203f296ce53d5d1183a02f0ddc64debe559 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Fri, 13 Feb 2026 15:44:20 -0500 Subject: [PATCH] panvk: Refactor resolveMode handling Reviewed-by: Lars-Ivar Hesselberg Simonsen Acked-by: Boris Brezillon Acked-by: Eric R. Smith Part-of: --- src/panfrost/vulkan/panvk_vX_cmd_draw.c | 56 ++++++++++++------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/panfrost/vulkan/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/panvk_vX_cmd_draw.c index fa4e5c70a7f..985866f6a34 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_draw.c @@ -144,8 +144,6 @@ render_state_set_color_attachment(struct panvk_cmd_buffer *cmdbuf, &fbinfo->rts[index].preload); if (att->resolveMode != VK_RESOLVE_MODE_NONE) { - struct panvk_resolve_attachment *resolve_info = - &render->color_attachments.resolve[index]; VK_FROM_HANDLE(panvk_image_view, resolve_iview, att->resolveImageView); /* VUID-VkRenderingAttachmentInfo-imageView-06862 and @@ -154,14 +152,14 @@ render_state_set_color_attachment(struct panvk_cmd_buffer *cmdbuf, * resolveView == NULL iff. multisampledRenderToSingleSampledEnable */ assert(ms2ss == (resolve_iview == NULL)); - resolve_info->mode = att->resolveMode; - if (!ms2ss) { - resolve_info->dst_iview = resolve_iview; - } else { - assert(iview_ss); - resolve_info->dst_iview = iview_ss; - assert(resolve_info->dst_iview->pview.nr_samples == 1); - } + const struct panvk_resolve_attachment resolve = { + .dst_iview = ms2ss ? iview_ss : resolve_iview, + .mode = att->resolveMode, + }; + assert(resolve.dst_iview != NULL); + assert(resolve.dst_iview->pview.nr_samples == 1); + + render->color_attachments.resolve[index] = resolve; } } @@ -229,18 +227,17 @@ render_state_set_z_attachment(struct panvk_cmd_buffer *cmdbuf, att_set_clear_preload(att, &fbinfo->zs.clear.z, &fbinfo->zs.preload.z); if (att->resolveMode != VK_RESOLVE_MODE_NONE) { - struct panvk_resolve_attachment *resolve_info = - &render->z_attachment.resolve; VK_FROM_HANDLE(panvk_image_view, resolve_iview, att->resolveImageView); + assert(ms2ss == (resolve_iview == NULL)); - resolve_info->mode = att->resolveMode; - if (!ms2ss) { - resolve_info->dst_iview = resolve_iview; - } else { - assert(iview_ss); - resolve_info->dst_iview = iview_ss; - assert(resolve_info->dst_iview->pview.nr_samples == 1); - } + const struct panvk_resolve_attachment resolve = { + .dst_iview = ms2ss ? iview_ss : resolve_iview, + .mode = att->resolveMode, + }; + assert(resolve.dst_iview != NULL); + assert(resolve.dst_iview->pview.nr_samples == 1); + + render->z_attachment.resolve = resolve; } } @@ -328,18 +325,17 @@ render_state_set_s_attachment(struct panvk_cmd_buffer *cmdbuf, att_set_clear_preload(att, &fbinfo->zs.clear.s, &fbinfo->zs.preload.s); if (att->resolveMode != VK_RESOLVE_MODE_NONE) { - struct panvk_resolve_attachment *resolve_info = - &render->s_attachment.resolve; VK_FROM_HANDLE(panvk_image_view, resolve_iview, att->resolveImageView); + assert(ms2ss == (resolve_iview == NULL)); - resolve_info->mode = att->resolveMode; - if (!ms2ss) { - resolve_info->dst_iview = resolve_iview; - } else { - assert(iview_ss); - resolve_info->dst_iview = iview_ss; - assert(resolve_info->dst_iview->pview.nr_samples == 1); - } + const struct panvk_resolve_attachment resolve = { + .dst_iview = ms2ss ? iview_ss : resolve_iview, + .mode = att->resolveMode, + }; + assert(resolve.dst_iview != NULL); + assert(resolve.dst_iview->pview.nr_samples == 1); + + render->s_attachment.resolve = resolve; } }