X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fetnaviv%2Fetnaviv_clear_blit.c;h=d9ff9624fa4c4e0cc1e2665e662efcd6b78ae10a;hb=bccd21ee88f633efafb59d0ef8a42478f2faa90b;hp=80967be3f93db4f10cc5d99242a4235bb8a70f63;hpb=28550c787595f04453d2a39f46f570a891368fcf;p=mesa.git diff --git a/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c b/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c index 80967be3f93..d9ff9624fa4 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c +++ b/src/gallium/drivers/etnaviv/etnaviv_clear_blit.c @@ -465,16 +465,24 @@ etna_try_rs_blit(struct pipe_context *pctx, ts_mem_config |= VIVS_TS_MEM_CONFIG_MSAA | msaa_format; } - uint32_t to_flush = 0; - - if (src->base.bind & PIPE_BIND_RENDER_TARGET) - to_flush |= VIVS_GL_FLUSH_CACHE_COLOR; - if (src->base.bind & PIPE_BIND_DEPTH_STENCIL) - to_flush |= VIVS_GL_FLUSH_CACHE_DEPTH; - - if (to_flush) { - etna_set_state(ctx->stream, VIVS_GL_FLUSH_CACHE, to_flush); + /* Always flush color and depth cache together before resolving. This works + * around artifacts that appear in some cases when scanning out a texture + * directly after it has been rendered to, such as rendering an animated web + * page in a QtWebEngine based WebView on GC2000. The artifacts look like + * the texture sampler samples zeroes instead of texture data in a small, + * irregular triangle in the lower right of each browser tile quad. Other + * attempts to avoid these artifacts, including a pipeline stall before the + * color flush or a TS cache flush afterwards, or flushing multiple times, + * with stalls before and after each flush, have shown no effect. */ + if (src->base.bind & PIPE_BIND_RENDER_TARGET || + src->base.bind & PIPE_BIND_DEPTH_STENCIL) { + etna_set_state(ctx->stream, VIVS_GL_FLUSH_CACHE, + VIVS_GL_FLUSH_CACHE_COLOR | VIVS_GL_FLUSH_CACHE_DEPTH); etna_stall(ctx->stream, SYNC_RECIPIENT_RA, SYNC_RECIPIENT_PE); + + if (src->levels[blit_info->src.level].ts_size && + src->levels[blit_info->src.level].ts_valid) + etna_set_state(ctx->stream, VIVS_TS_FLUSH_CACHE, VIVS_TS_FLUSH_CACHE_FLUSH); } /* Set up color TS to source surface before blit, if needed */