[Mesa-dev] [PATCH v3 56/63] radeonsi: decompress resident textures/images before graphics/compute

Marek Olšák maraeo at gmail.com
Tue Jun 13 21:03:10 UTC 2017


On Fri, Jun 9, 2017 at 3:35 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Similar to the existing decompression code path except that it
> loops over the list of resident textures/images.
>
> v3: - move the blitter check back to si_decompress_textures()
>     - decompress resident textures directly in si_decompress_textures()
>     - depth_texture -> needs_depth_decompress
>     - compressed_colortex -> need_color_decompress
>     - rebase on top of marek's cleanup
> v2: - store pipe_sampler_view instead of si_sampler_view
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> Reviewed-by: Marek Olšák <marek.olsak at amd.com> (v2)
> ---
>  src/gallium/drivers/radeonsi/si_blit.c        | 65 +++++++++++++++++++++++++++
>  src/gallium/drivers/radeonsi/si_descriptors.c | 52 +++++++++++++++++++++
>  src/gallium/drivers/radeonsi/si_pipe.h        |  3 ++
>  3 files changed, 120 insertions(+)
>
> diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
> index 2740d040df..8b77242759 100644
> --- a/src/gallium/drivers/radeonsi/si_blit.c
> +++ b/src/gallium/drivers/radeonsi/si_blit.c
> @@ -22,6 +22,7 @@
>   */
>
>  #include "si_pipe.h"
> +#include "si_compute.h"
>  #include "util/u_format.h"
>  #include "util/u_surface.h"
>
> @@ -706,6 +707,67 @@ static void si_check_render_feedback(struct si_context *sctx)
>         sctx->need_check_render_feedback = false;
>  }
>
> +static void si_decompress_resident_textures(struct si_context *sctx)
> +{
> +       unsigned num_resident_tex_handles;
> +       unsigned i;
> +
> +       num_resident_tex_handles = sctx->resident_tex_handles.size /
> +                                  sizeof(struct si_texture_handle *);
> +
> +       for (i = 0; i < num_resident_tex_handles; i++) {
> +               struct si_texture_handle *tex_handle =
> +                       *util_dynarray_element(&sctx->resident_tex_handles,
> +                                              struct si_texture_handle *, i);
> +               struct pipe_sampler_view *view = tex_handle->view;
> +               struct si_sampler_view *sview = (struct si_sampler_view *)view;
> +               struct r600_texture *tex;
> +
> +               assert(view);

This assertion is unnecessary. view is guaranteed to be non-NULL.

> +               tex = (struct r600_texture *)view->texture;
> +
> +               if (view->texture->target == PIPE_BUFFER)
> +                       continue;
> +
> +               if (tex_handle->needs_color_decompress)
> +                       si_decompress_color_texture(sctx, tex, view->u.tex.first_level,
> +                                                   view->u.tex.last_level);
> +
> +               if (tex_handle->needs_depth_decompress)
> +                       si_decompress_depth(sctx, tex,
> +                               sview->is_stencil_sampler ? PIPE_MASK_S : PIPE_MASK_Z,
> +                               view->u.tex.first_level, view->u.tex.last_level,
> +                               0, util_max_layer(&tex->resource.b.b, view->u.tex.first_level));
> +       }
> +}
> +
> +static void si_decompress_resident_images(struct si_context *sctx)
> +{
> +       unsigned num_resident_img_handles;
> +       unsigned i;
> +
> +       num_resident_img_handles = sctx->resident_img_handles.size /
> +                                  sizeof(struct si_image_handle *);
> +
> +       for (i = 0; i < num_resident_img_handles; i++) {
> +               struct si_image_handle *img_handle =
> +                       *util_dynarray_element(&sctx->resident_img_handles,
> +                                              struct si_image_handle *, i);
> +               struct pipe_image_view *view = &img_handle->view;
> +               struct r600_texture *tex;
> +
> +               assert(view);

Same here.

Other than those, this is:

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

Marek


More information about the mesa-dev mailing list