etnaviv: add tile size helper

On older GPUs a color tile was always 64 Byte. On new GPUs with
CACHE128B256BPERLINE support the tile size is either 128 Byte or
256 Byte depending on the TS mode. Add a helper to return the
color tile size and use in in places that use hard-coded tile
size values or do their own calculation.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9255>
This commit is contained in:
Lucas Stach
2022-04-10 13:30:35 +02:00
committed by Marge Bot
parent 2d2f9572c2
commit 6261ca7425
5 changed files with 24 additions and 14 deletions
+2 -1
View File
@@ -450,7 +450,8 @@ etna_try_blt_blit(struct pipe_context *pctx,
op.ts_clear_value[0] = src_lev->clear_value;
op.ts_clear_value[1] = src_lev->clear_value;
op.ts_mode = src_lev->ts_mode;
op.num_tiles = DIV_ROUND_UP(src_lev->size, src_lev->ts_mode ? 256 : 128);
op.num_tiles = DIV_ROUND_UP(src_lev->size,
etna_screen_get_tile_size(ctx->screen, src_lev->ts_mode));
op.bpp = util_format_get_blocksize(src->base.format);
etna_set_state(ctx->stream, VIVS_GL_FLUSH_CACHE, 0x00000c23);
@@ -28,6 +28,8 @@
#include <stdbool.h>
#include <stdint.h>
#include "hw/common.xml.h"
#include "hw/common_3d.xml.h"
#include "hw/state.xml.h"
#include "hw/state_3d.xml.h"
+6 -12
View File
@@ -85,7 +85,6 @@ etna_screen_resource_alloc_ts(struct pipe_screen *pscreen,
{
struct etna_screen *screen = etna_screen(pscreen);
size_t rt_ts_size, ts_layer_stride;
size_t bytes_per_tile;
uint8_t ts_mode = TS_MODE_128B;
int8_t ts_compress_fmt;
@@ -98,20 +97,15 @@ etna_screen_resource_alloc_ts(struct pipe_screen *pscreen,
ts_compress_fmt = (screen->specs.v4_compression || rsc->base.nr_samples > 1) ?
translate_ts_format(rsc->base.format) : -1;
if (VIV_FEATURE(screen, chipMinorFeatures6, CACHE128B256BPERLINE)) {
/* enable 256B ts mode with compression, as it improves performance
* the size of the resource might also determine if we want to use it or not
*/
if (ts_compress_fmt >= 0)
/* enable 256B ts mode with compression, as it improves performance
* the size of the resource might also determine if we want to use it or not
*/
if (VIV_FEATURE(screen, chipMinorFeatures6, CACHE128B256BPERLINE) &&
ts_compress_fmt >= 0)
ts_mode = TS_MODE_256B;
bytes_per_tile = ts_mode == TS_MODE_256B ? 256 : 128;
} else {
bytes_per_tile = 64;
}
ts_layer_stride = align(DIV_ROUND_UP(rsc->levels[0].layer_stride,
bytes_per_tile *
etna_screen_get_tile_size(screen, ts_mode) *
8 / screen->specs.bits_per_tile),
0x100 * screen->specs.pixel_pipes);
rt_ts_size = ts_layer_stride * rsc->base.array_size;
+2 -1
View File
@@ -789,7 +789,8 @@ etna_try_rs_blit(struct pipe_context *pctx,
.clear_mode = VIVS_RS_CLEAR_CONTROL_MODE_DISABLED,
.width = width,
.height = height,
.tile_count = src_lev->layer_stride / 64
.tile_count = src_lev->layer_stride /
etna_screen_get_tile_size(ctx->screen, src_lev->ts_mode),
});
etna_submit_rs_state(ctx, &copy_to_screen);
@@ -109,4 +109,16 @@ struct pipe_screen *
etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu,
struct renderonly *ro);
static inline size_t
etna_screen_get_tile_size(struct etna_screen *screen, uint8_t ts_mode)
{
if (!VIV_FEATURE(screen, chipMinorFeatures6, CACHE128B256BPERLINE))
return 64;
if (ts_mode == TS_MODE_256B)
return 256;
else
return 128;
}
#endif