[Mesa-dev] [PATCH] mesa/formats: Fix swizzle flipping for big-endian targets

Oded Gabbay oded.gabbay at gmail.com
Tue Aug 11 05:25:34 PDT 2015


On Mon, Aug 10, 2015 at 9:50 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> The swizzle defines where in the format you should look for any given
> channel.  When we flip the format around for BE targets, we need to change
> the destinations of the swizzles, not the sources.  For example, say the
> format is an RGBX format with a swizzle of xyz1 on LE.  Then it should be
> wzy1 on BE;  however, the code as it was before, would have made it 1zyx on
> BE which is clearly wrong.
>
> Cc: Iago Toral <itoral at igalia.com>
> Cc: Oded Gabbay <oded.gabbay at gmail.com>
> ---
>  src/mesa/main/formats.c | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
> index d927073..27590ed 100644
> --- a/src/mesa/main/formats.c
> +++ b/src/mesa/main/formats.c
> @@ -354,14 +354,22 @@ _mesa_array_format_flip_channels(mesa_array_format format)
>        return format;
>
>     if (num_channels == 2) {
> -      _mesa_array_format_set_swizzle(&format, swizzle[1], swizzle[0],
> -                                     swizzle[2], swizzle[3]);
> +      /* Assert that the swizzle makes sense for 2 channels */
> +      for (unsigned i = 0; i < 4; i++)
> +         assert(swizzle[i] != 2 && swizzle[i] != 3);
> +
> +      static const uint8_t flip_xy[6] = { 1, 0, 2, 3, 4, 5 };
> +      _mesa_array_format_set_swizzle(&format,
> +                                     flip_xy[swizzle[0]], flip_xy[swizzle[1]],
> +                                     flip_xy[swizzle[2]], flip_xy[swizzle[3]]);
>        return format;
>     }
>
>     if (num_channels == 4) {
> -      _mesa_array_format_set_swizzle(&format, swizzle[3], swizzle[2],
> -                                     swizzle[1], swizzle[0]);
> +      static const uint8_t flip[6] = { 3, 2, 1, 0, 4, 5 };
> +      _mesa_array_format_set_swizzle(&format,
> +                                     flip[swizzle[0]], flip[swizzle[1]],
> +                                     flip[swizzle[2]], flip[swizzle[3]]);
>        return format;
>     }
>
> --
> 2.4.3
>

Reviewed-by: Oded Gabbay <oded.gabbay at gmail.com>


More information about the mesa-dev mailing list