Re: [Mesa-dev] [PATCH 08/11] radeonsi: fix memory exhaustion issue with DCC statistics gathering with DRI2
Quoting Marek Olšák (2018-06-29 09:48:08) > On Fri, Jun 29, 2018 at 11:40 AM, Dylan Baker wrote: > > Quoting Marek Olšák (2018-06-18 16:33:09) > >> From: Marek Olšák > >> > >> Cc: 18.1 > >> --- > >> 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 > > > > Hi Marek, > > > > This didn't apply cleanly to 18.1 because of > > 1ba87f4438069964af6548f4fa05386be999f4de (radeonsi: rename r600_texture -> > > si_texture, rxxx -> xxx or sxxx), I've attempted to rebase the commit by > > changing "tex" to "rtex", please take a look at the commit in staging/18.1 > > in > > the main tree or 18.1-proposed in my tree and let me know if it looks good > > to > > you. > > Yes, it looks good. Thanks. > > Marek Thank you. signature.asc Description: signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 08/11] radeonsi: fix memory exhaustion issue with DCC statistics gathering with DRI2
On Fri, Jun 29, 2018 at 11:40 AM, Dylan Baker wrote: > Quoting Marek Olšák (2018-06-18 16:33:09) >> From: Marek Olšák >> >> Cc: 18.1 >> --- >> 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 > > Hi Marek, > > This didn't apply cleanly to 18.1 because of > 1ba87f4438069964af6548f4fa05386be999f4de (radeonsi: rename r600_texture -> > si_texture, rxxx -> xxx or sxxx), I've attempted to rebase the commit by > changing "tex" to "rtex", please take a look at the commit in staging/18.1 in > the main tree or 18.1-proposed in my tree and let me know if it looks good to > you. Yes, it looks good. Thanks. Marek ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 08/11] radeonsi: fix memory exhaustion issue with DCC statistics gathering with DRI2
Quoting Marek Olšák (2018-06-18 16:33:09) > From: Marek Olšák > > Cc: 18.1 > --- > 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 Hi Marek, This didn't apply cleanly to 18.1 because of 1ba87f4438069964af6548f4fa05386be999f4de (radeonsi: rename r600_texture -> si_texture, rxxx -> xxx or sxxx), I've attempted to rebase the commit by changing "tex" to "rtex", please take a look at the commit in staging/18.1 in the main tree or 18.1-proposed in my tree and let me know if it looks good to you. Dylan signature.asc Description: signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev