mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-24 04:08:10 +02:00
etnaviv: don't do resolve-in-place without valid TS
GC3000 resolve-in-place assumes that the TS state is configured.
If it is not, this will result in MMU errors. This is especially
apparent when using glGenMipmaps().
Fixes: 78ade65956 ("etnaviv: Do GC3000 resolve-in-place when possible")
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com>
Tested-by: Chris Healy <cphealy@gmail.com>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
This commit is contained in:
parent
c39f39106d
commit
8fbd82f464
4 changed files with 11 additions and 0 deletions
|
|
@ -555,6 +555,7 @@ etna_try_rs_blit(struct pipe_context *pctx,
|
|||
}
|
||||
|
||||
/* Set up color TS to source surface before blit, if needed */
|
||||
bool source_ts_valid = false;
|
||||
if (src->levels[blit_info->src.level].ts_size &&
|
||||
src->levels[blit_info->src.level].ts_valid) {
|
||||
struct etna_reloc reloc;
|
||||
|
|
@ -579,6 +580,8 @@ etna_try_rs_blit(struct pipe_context *pctx,
|
|||
|
||||
etna_set_state(ctx->stream, VIVS_TS_COLOR_CLEAR_VALUE,
|
||||
src->levels[blit_info->src.level].clear_value);
|
||||
|
||||
source_ts_valid = true;
|
||||
} else {
|
||||
etna_set_state(ctx->stream, VIVS_TS_MEM_CONFIG, ts_mem_config);
|
||||
}
|
||||
|
|
@ -593,6 +596,7 @@ etna_try_rs_blit(struct pipe_context *pctx,
|
|||
.source_stride = src_lev->stride,
|
||||
.source_padded_width = src_lev->padded_width,
|
||||
.source_padded_height = src_lev->padded_height,
|
||||
.source_ts_valid = source_ts_valid,
|
||||
.dest_format = translate_rs_format(dst_format),
|
||||
.dest_tiling = dst->layout,
|
||||
.dest = dst->bo,
|
||||
|
|
|
|||
|
|
@ -171,6 +171,10 @@ etna_submit_rs_state(struct etna_context *ctx,
|
|||
struct etna_cmd_stream *stream = ctx->stream;
|
||||
struct etna_coalesce coalesce;
|
||||
|
||||
if (cs->RS_KICKER_INPLACE && !cs->source_ts_valid)
|
||||
/* Inplace resolve is no-op if TS is not configured */
|
||||
return;
|
||||
|
||||
ctx->stats.rs_operations++;
|
||||
|
||||
if (cs->RS_KICKER_INPLACE) {
|
||||
|
|
|
|||
|
|
@ -133,6 +133,7 @@ etna_compile_rs_state(struct etna_context *ctx, struct compiled_rs_state *cs,
|
|||
/* Total number of tiles (same as for autodisable) */
|
||||
cs->RS_KICKER_INPLACE = rs->source_padded_width * rs->source_padded_height / 16;
|
||||
}
|
||||
cs->source_ts_valid = rs->source_ts_valid;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
struct rs_state {
|
||||
uint8_t downsample_x : 1; /* Downsample in x direction */
|
||||
uint8_t downsample_y : 1; /* Downsample in y direction */
|
||||
uint8_t source_ts_valid : 1;
|
||||
|
||||
uint8_t source_format; /* RS_FORMAT_XXX */
|
||||
uint8_t source_tiling; /* ETNA_LAYOUT_XXX */
|
||||
|
|
@ -61,6 +62,7 @@ struct rs_state {
|
|||
|
||||
/* treat this as opaque structure */
|
||||
struct compiled_rs_state {
|
||||
uint8_t source_ts_valid : 1;
|
||||
uint32_t RS_CONFIG;
|
||||
uint32_t RS_SOURCE_STRIDE;
|
||||
uint32_t RS_DEST_STRIDE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue