[Mesa-dev] [PATCH] mesa: fix rgtc snorm decoding

Zack Rusin zackr at vmware.com
Tue Jul 23 09:00:20 PDT 2013


Reviewed-by: Zack Rusin <zackr at vmware.com>

----- Original Message -----
> From: Roland Scheidegger <sroland at vmware.com>
> 
> The codeword must be unsigned (otherwise will shift in 1's from above when
> merging low/high parts so some texels decode wrong).
> This also affects gallium's util/u_format_rgtc.
> ---
>  src/mesa/main/texcompress_rgtc_tmp.h |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/src/mesa/main/texcompress_rgtc_tmp.h
> b/src/mesa/main/texcompress_rgtc_tmp.h
> index 277d69b..5fa9de6 100644
> --- a/src/mesa/main/texcompress_rgtc_tmp.h
> +++ b/src/mesa/main/texcompress_rgtc_tmp.h
> @@ -37,9 +37,9 @@ static void TAG(fetch_texel_rgtc)(unsigned srcRowStride,
> const TYPE *pixdata,
>     const TYPE alpha0 = blksrc[0];
>     const TYPE alpha1 = blksrc[1];
>     const char bit_pos = ((j&3) * 4 + (i&3)) * 3;
> -   const TYPE acodelow = blksrc[2 + bit_pos / 8];
> -   const TYPE acodehigh = (3 + bit_pos / 8) < 8 ? blksrc[3 + bit_pos / 8] :
> 0;
> -   const TYPE code = (acodelow >> (bit_pos & 0x7) |
> +   const unsigned char acodelow = blksrc[2 + bit_pos / 8];
> +   const unsigned char acodehigh = (3 + bit_pos / 8) < 8 ? blksrc[3 +
> bit_pos / 8] : 0;
> +   const unsigned char code = (acodelow >> (bit_pos & 0x7) |
>        (acodehigh  << (8 - (bit_pos & 0x7)))) & 0x7;
>  
>     if (code == 0)
> --
> 1.7.9.5
> 


More information about the mesa-dev mailing list