From: Iago Toral Quiroga Date: Tue, 17 Dec 2019 07:51:33 +0000 (+0100) Subject: v3dv: precompute more tiling info at framebuffer creation time X-Git-Tag: upstream/21.0.0~4248 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=98697e1fb57fdfdda14583e0537ee2062f0ece79;p=platform%2Fupstream%2Fmesa.git v3dv: precompute more tiling info at framebuffer creation time Part-of: --- diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 6a7ff27..334e2e6 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -1336,6 +1336,26 @@ compute_tile_size_for_framebuffer(struct v3dv_framebuffer *framebuffer) DIV_ROUND_UP(framebuffer->width, framebuffer->tile_width); framebuffer->draw_tiles_y = DIV_ROUND_UP(framebuffer->height, framebuffer->tile_height); + + /* Size up our supertiles until we get under the limit */ + const uint32_t max_supertiles = 256; + framebuffer->supertile_width = 1; + framebuffer->supertile_height = 1; + for (;;) { + framebuffer->frame_width_in_supertiles = + DIV_ROUND_UP(framebuffer->draw_tiles_x, framebuffer->supertile_width); + framebuffer->frame_height_in_supertiles = + DIV_ROUND_UP(framebuffer->draw_tiles_y, framebuffer->supertile_height); + const uint32_t num_supertiles = framebuffer->frame_width_in_supertiles * + framebuffer->frame_height_in_supertiles; + if (num_supertiles < max_supertiles) + break; + + if (framebuffer->supertile_width < framebuffer->supertile_height) + framebuffer->supertile_width++; + else + framebuffer->supertile_height++; + } } VkResult diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index f7fd5e7..5bd2e94 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -338,6 +338,10 @@ struct v3dv_framebuffer { uint32_t tile_height; uint32_t draw_tiles_x; uint32_t draw_tiles_y; + uint32_t supertile_width; + uint32_t supertile_height; + uint32_t frame_width_in_supertiles; + uint32_t frame_height_in_supertiles; uint32_t attachment_count; struct v3dv_image_view *attachments[0];