[Mesa-dev] [PATCH 5/5] radeonsi: add new si_check_render_feedback_texture() helper

Marek Olšák maraeo at gmail.com
Mon Apr 10 15:15:10 UTC 2017


Other than my comment on patch 3, the series is:

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Thu, Apr 6, 2017 at 12:07 AM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> For bindless.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/gallium/drivers/radeonsi/si_blit.c | 89 +++++++++++++++++-----------------
>  1 file changed, 44 insertions(+), 45 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
> index f690f3e2f3..998288dba2 100644
> --- a/src/gallium/drivers/radeonsi/si_blit.c
> +++ b/src/gallium/drivers/radeonsi/si_blit.c
> @@ -527,6 +527,40 @@ si_decompress_image_color_textures(struct si_context *sctx,
>         }
>  }
>
> +static void si_check_render_feedback_texture(struct si_context *sctx,
> +                                            struct r600_texture *tex,
> +                                            unsigned first_level,
> +                                            unsigned last_level,
> +                                            unsigned first_layer,
> +                                            unsigned last_layer)
> +{
> +       bool render_feedback = false;
> +
> +       if (!tex->dcc_offset)
> +               return;
> +
> +       for (unsigned j = 0; j < sctx->framebuffer.state.nr_cbufs; ++j) {
> +               struct r600_surface * surf;
> +
> +               if (!sctx->framebuffer.state.cbufs[j])
> +                       continue;
> +
> +               surf = (struct r600_surface*)sctx->framebuffer.state.cbufs[j];
> +
> +               if (tex == (struct r600_texture *)surf->base.texture &&
> +                   surf->base.u.tex.level >= first_level &&
> +                   surf->base.u.tex.level <= last_level &&
> +                   surf->base.u.tex.first_layer <= last_layer &&
> +                   surf->base.u.tex.last_layer >= first_layer) {
> +                       render_feedback = true;
> +                       break;
> +               }
> +       }
> +
> +       if (render_feedback)
> +               r600_texture_disable_dcc(&sctx->b, tex);
> +}
> +
>  static void si_check_render_feedback_textures(struct si_context *sctx,
>                                                struct si_textures_info *textures)
>  {
> @@ -535,7 +569,6 @@ static void si_check_render_feedback_textures(struct si_context *sctx,
>         while (mask) {
>                 const struct pipe_sampler_view *view;
>                 struct r600_texture *tex;
> -               bool render_feedback = false;
>
>                 unsigned i = u_bit_scan(&mask);
>
> @@ -544,29 +577,12 @@ static void si_check_render_feedback_textures(struct si_context *sctx,
>                         continue;
>
>                 tex = (struct r600_texture *)view->texture;
> -               if (!tex->dcc_offset)
> -                       continue;
>
> -               for (unsigned j = 0; j < sctx->framebuffer.state.nr_cbufs; ++j) {
> -                       struct r600_surface * surf;
> -
> -                       if (!sctx->framebuffer.state.cbufs[j])
> -                               continue;
> -
> -                       surf = (struct r600_surface*)sctx->framebuffer.state.cbufs[j];
> -
> -                       if (tex == (struct r600_texture*)surf->base.texture &&
> -                           surf->base.u.tex.level >= view->u.tex.first_level &&
> -                           surf->base.u.tex.level <= view->u.tex.last_level &&
> -                           surf->base.u.tex.first_layer <= view->u.tex.last_layer &&
> -                           surf->base.u.tex.last_layer >= view->u.tex.first_layer) {
> -                               render_feedback = true;
> -                               break;
> -                       }
> -               }
> -
> -               if (render_feedback)
> -                       r600_texture_disable_dcc(&sctx->b, tex);
> +               si_check_render_feedback_texture(sctx, tex,
> +                                                view->u.tex.first_level,
> +                                                view->u.tex.last_level,
> +                                                view->u.tex.first_layer,
> +                                                view->u.tex.last_layer);
>         }
>  }
>
> @@ -578,7 +594,6 @@ static void si_check_render_feedback_images(struct si_context *sctx,
>         while (mask) {
>                 const struct pipe_image_view *view;
>                 struct r600_texture *tex;
> -               bool render_feedback = false;
>
>                 unsigned i = u_bit_scan(&mask);
>
> @@ -587,28 +602,12 @@ static void si_check_render_feedback_images(struct si_context *sctx,
>                         continue;
>
>                 tex = (struct r600_texture *)view->resource;
> -               if (!tex->dcc_offset)
> -                       continue;
> -
> -               for (unsigned j = 0; j < sctx->framebuffer.state.nr_cbufs; ++j) {
> -                       struct r600_surface * surf;
> -
> -                       if (!sctx->framebuffer.state.cbufs[j])
> -                               continue;
> -
> -                       surf = (struct r600_surface*)sctx->framebuffer.state.cbufs[j];
> -
> -                       if (tex == (struct r600_texture*)surf->base.texture &&
> -                           surf->base.u.tex.level == view->u.tex.level &&
> -                           surf->base.u.tex.first_layer <= view->u.tex.last_layer &&
> -                           surf->base.u.tex.last_layer >= view->u.tex.first_layer) {
> -                               render_feedback = true;
> -                               break;
> -                       }
> -               }
>
> -               if (render_feedback)
> -                       r600_texture_disable_dcc(&sctx->b, tex);
> +               si_check_render_feedback_texture(sctx, tex,
> +                                                view->u.tex.level,
> +                                                view->u.tex.level,
> +                                                view->u.tex.first_layer,
> +                                                view->u.tex.last_layer);
>         }
>  }
>
> --
> 2.12.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list