[Mesa-dev] [PATCH] mesa: Fix uf10_to_f32() scale factor in the E == 0 and M != 0 case.

Antía Puentes apuentes at igalia.com
Tue Aug 16 10:36:03 UTC 2016


The patch looks good to me.

Reviewed-by: Antia Puentes <apuentes at igalia.com>

On lun, 2016-08-15 at 23:50 -0700, Kenneth Graunke wrote:
> GL_EXT_packed_float, 2.1.B Unsigned 10-Bit Floating-Point Numbers:
> 
>         0.0,                      if E == 0 and M == 0,
>         2^-14 * (M / 32),         if E == 0 and M != 0,
>         2^(E-15) * (1 + M/32),    if 0 < E < 31,
>         INF,                      if E == 31 and M == 0, or
>         NaN,                      if E == 31 and M != 0,
> 
> In the second case (E == 0 and M != 0), we were multiplying the
> mantissa
> by 2^-20, when we should have been multiplying by 2^-19 (which is
> 2^(-14 + -5), or 2^-14 * 2^-5, or 2^-14 / 32).
> 
> The previous section defines the formula for 11-bit numbers, which
> is:
> 
>         2^-14 * (M / 64),         if E == 0 and M != 0,
> 
> In other words, we had accidentally copy and pasted the 11-bit code
> to the 10-bit case, and neglected to change the exponent.
> 
> Fixes dEQP-GLES3.functional.pbo.renderbuffer.r11f_g11f_b10f_triangles
> when run with surface dimensions of 1536x1152 or 1920x1080.
> 
> References: https://code.google.com/p/chrome-os-partner/issues/detail
> ?id=56244
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> Reviewed-by: Stephane Marchesin <stephane.marchesin at gmail.com>
> ---
>  src/util/format_r11g11b10f.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/util/format_r11g11b10f.h
> b/src/util/format_r11g11b10f.h
> index c9e967c..f6cd4ac 100644
> --- a/src/util/format_r11g11b10f.h
> +++ b/src/util/format_r11g11b10f.h
> @@ -191,7 +191,7 @@ static inline float uf10_to_f32(uint16_t val)
>  
>     if (exponent == 0) {
>        if (mantissa != 0) {
> -         const float scale = 1.0 / (1 << 20);
> +         const float scale = 1.0 / (1 << 19);
>           f32.f = scale * mantissa;
>        }
>     } else if (exponent == 31) {


More information about the mesa-dev mailing list