[Mesa-dev] [PATCH 6/8] radeonsi: Add sampling of DCC compressed textures.

Marek Olšák maraeo at gmail.com
Wed Sep 23 17:39:07 PDT 2015


On Fri, Sep 4, 2015 at 9:47 PM, Bas Nieuwenhuizen
<bas at basnieuwenhuizen.nl> wrote:
> The values for resource word 6 have been taken from Catalyst traces.
>
> Signed-off-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> ---
>  src/gallium/drivers/radeonsi/si_descriptors.c |  5 +++++
>  src/gallium/drivers/radeonsi/si_pipe.h        |  1 +
>  src/gallium/drivers/radeonsi/si_state.c       | 13 +++++++++++--
>  3 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
> index d7cad23..d23da1d 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -192,6 +192,11 @@ static void si_set_sampler_view(struct si_context *sctx, unsigned shader,
>                                 rview->resource, RADEON_USAGE_READ,
>                                 si_get_resource_ro_priority(rview->resource));
>
> +               if (rview->dcc_buffer)
> +                       radeon_add_to_buffer_list(&sctx->b, &sctx->b.rings.gfx,
> +                               rview->dcc_buffer, RADEON_USAGE_READ,
> +                               si_get_resource_ro_priority(rview->resource));
> +
>                 pipe_sampler_view_reference(&views->views[slot], view);
>                 memcpy(views->desc.list + slot*8, view_desc, 8*4);
>                 views->desc.enabled_mask |= 1llu << slot;
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
> index 66c66c8..4b3ff8e 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.h
> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
> @@ -96,6 +96,7 @@ struct si_sampler_view {
>         struct pipe_sampler_view        base;
>         struct list_head                list;
>         struct r600_resource            *resource;
> +       struct r600_resource            *dcc_buffer;
>          /* [0..7] = image descriptor
>           * [4..7] = buffer descriptor */
>         uint32_t                        state[8];
> diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
> index 3e11922..755de28 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -2633,8 +2633,17 @@ si_create_sampler_view_custom(struct pipe_context *ctx,
>         view->state[4] = (S_008F20_DEPTH(depth - 1) | S_008F20_PITCH(pitch - 1));
>         view->state[5] = (S_008F24_BASE_ARRAY(state->u.tex.first_layer) |
>                           S_008F24_LAST_ARRAY(state->u.tex.last_layer));
> -       view->state[6] = 0;
> -       view->state[7] = 0;
> +
> +       if(tmp->dcc_buffer) {
> +               uint64_t dcc_offset = surflevel[base_level].dcc_offset;
> +
> +               view->state[6] = S_008F28_COMPRESSION_EN(1) | S_008F28_ALPHA_IS_ON_MSB(1);

The second specified field should be:
ALPHA_IS_ON_MSB(r600_translate_colorswap(format) <= 1)

Marek


More information about the mesa-dev mailing list