From: Jonathan Marek Date: Thu, 4 Jul 2019 17:30:55 +0000 (-0400) Subject: etnaviv: fix ts size calculation X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bc5ae6a330102a1ae4ef573539f79393e64bb2c0;p=mesa.git etnaviv: fix ts size calculation The size of the TS is screen->specs.bits_per_tile bits per tile, with each tile being 64 bytes of the resource. This gives the same result for 32bpp formats, but reduces the size of TS for 16bpp formats by 2. Signed-off-by: Jonathan Marek Reviewed-by: Christian Gmeiner --- diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index ab77a80c72b..6607e792f46 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c @@ -84,13 +84,12 @@ etna_screen_resource_alloc_ts(struct pipe_screen *pscreen, struct etna_resource *rsc) { struct etna_screen *screen = etna_screen(pscreen); - size_t rt_ts_size, ts_layer_stride, pixels; + size_t rt_ts_size, ts_layer_stride; assert(!rsc->ts_bo); - /* TS only for level 0 -- XXX is this formula correct? */ - pixels = rsc->levels[0].layer_stride / util_format_get_blocksize(rsc->base.format); - ts_layer_stride = align(pixels * screen->specs.bits_per_tile / 0x80, + ts_layer_stride = align(DIV_ROUND_UP(rsc->levels[0].layer_stride, + 64 * 8 / screen->specs.bits_per_tile), 0x100 * screen->specs.pixel_pipes); rt_ts_size = ts_layer_stride * rsc->base.array_size; if (rt_ts_size == 0)