From: Marek Olšák <marek.ol...@amd.com> Cc: 18.1 <mesa-sta...@lists.freedesktop.org> --- src/gallium/drivers/radeonsi/si_blit.c | 30 +++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index fe059b36577..93cf7fe9001 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -1320,23 +1320,47 @@ static void si_flush_resource(struct pipe_context *ctx, if (rtex->dcc_separate_buffer && !rtex->separate_dcc_dirty) return; if (!rtex->is_depth && (rtex->cmask.size || rtex->dcc_offset)) { si_blit_decompress_color(sctx, rtex, 0, res->last_level, 0, util_max_layer(res, 0), rtex->dcc_separate_buffer != NULL); } /* Always do the analysis even if DCC is disabled at the moment. */ - if (rtex->dcc_gather_statistics && rtex->separate_dcc_dirty) { - rtex->separate_dcc_dirty = false; - vi_separate_dcc_process_and_reset_stats(ctx, rtex); + if (rtex->dcc_gather_statistics) { + bool separate_dcc_dirty = rtex->separate_dcc_dirty; + + /* If the color buffer hasn't been unbound and fast clear hasn't + * been used, separate_dcc_dirty is false, but there may have been + * new rendering. Check if the color buffer is bound and assume + * it's dirty. + * + * Note that DRI2 never unbinds window colorbuffers, which means + * the DCC pipeline statistics query would never be re-set and would + * keep adding new results until all free memory is exhausted if we + * didn't do this. + */ + if (!separate_dcc_dirty) { + for (unsigned i = 0; i < sctx->framebuffer.state.nr_cbufs; i++) { + if (sctx->framebuffer.state.cbufs[i] && + sctx->framebuffer.state.cbufs[i]->texture == res) { + separate_dcc_dirty = true; + break; + } + } + } + + if (separate_dcc_dirty) { + rtex->separate_dcc_dirty = false; + vi_separate_dcc_process_and_reset_stats(ctx, rtex); + } } } void si_decompress_dcc(struct si_context *sctx, struct r600_texture *rtex) { if (!rtex->dcc_offset) return; si_blit_decompress_color(sctx, rtex, 0, rtex->buffer.b.b.last_level, 0, util_max_layer(&rtex->buffer.b.b, 0), -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev