From 4b3931ee6c61caecabce4a49aace4be91d8d736a Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Fri, 12 Nov 2021 08:09:26 +0100 Subject: [PATCH] v3dv: account for multisampling when computing subpass granularity MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The granularity is defined by the tile size, which is also determined by multisampling. Reviewed-by: Alejandro Piñeiro Part-of: --- src/broadcom/vulkan/v3dv_pass.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/broadcom/vulkan/v3dv_pass.c b/src/broadcom/vulkan/v3dv_pass.c index 8a262a8..3eb70a2 100644 --- a/src/broadcom/vulkan/v3dv_pass.c +++ b/src/broadcom/vulkan/v3dv_pass.c @@ -302,6 +302,7 @@ subpass_get_granularity(struct v3dv_device *device, struct v3dv_subpass *subpass = &pass->subpasses[subpass_idx]; const uint32_t color_attachment_count = subpass->color_count; + bool msaa = false; uint32_t max_internal_bpp = 0; for (uint32_t i = 0; i < color_attachment_count; i++) { uint32_t attachment_idx = subpass->color_attachments[i].attachment; @@ -315,6 +316,9 @@ subpass_get_granularity(struct v3dv_device *device, (format->rt_type, &internal_type, &internal_bpp); max_internal_bpp = MAX2(max_internal_bpp, internal_bpp); + + if (desc->samples > VK_SAMPLE_COUNT_1_BIT) + msaa = true; } uint32_t idx = 0; @@ -323,6 +327,9 @@ subpass_get_granularity(struct v3dv_device *device, else if (color_attachment_count > 1) idx += 1; + if (msaa) + idx += 2; + idx += max_internal_bpp; assert(idx < ARRAY_SIZE(tile_sizes)); -- 2.7.4