diff options
author | Jonathan Marek <[email protected]> | 2019-07-04 13:30:55 -0400 |
---|---|---|
committer | Jonathan Marek <[email protected]> | 2019-07-04 14:05:09 -0400 |
commit | bc5ae6a330102a1ae4ef573539f79393e64bb2c0 (patch) | |
tree | fca6d8b6a9a42599da20c803ec17e509a0055e70 /src | |
parent | 2f540745adbee0737b4d0fcc34b7ed96bf0e501c (diff) |
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 <[email protected]>
Reviewed-by: Christian Gmeiner <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/etnaviv/etnaviv_resource.c | 7 |
1 files changed, 3 insertions, 4 deletions
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) |