[Mesa-dev] [PATCH v3 01/24] mesa/format_utils: Fix a bug in unorm_to_float helper function
Jason Ekstrand
jason at jlekstrand.net
Wed Dec 10 08:08:35 PST 2014
On Tue, Dec 9, 2014 at 10:53 PM, Michel Dänzer <michel at daenzer.net> wrote:
> On 09.12.2014 21:06, Iago Toral Quiroga wrote:
> > From: Jason Ekstrand <jason.ekstrand at intel.com>
> >
> > This patch fixes the return of a wrong value when x is lower than
> > -MAX_INT(src_bits) as the result would not be between [-1.0 1.0].
> >
> > v2 by Samuel Iglesias <siglesias at igalia.com>:
> > - Modify unorm_to_float() to avoid doing the division when
> > x == -MAX_INT(src_bits)
> >
> > Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> > ---
> > src/mesa/main/format_utils.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/src/mesa/main/format_utils.c b/src/mesa/main/format_utils.c
> > index 93a0cea..5dd0848 100644
> > --- a/src/mesa/main/format_utils.c
> > +++ b/src/mesa/main/format_utils.c
> > @@ -152,7 +152,7 @@ unorm_to_float(unsigned x, unsigned src_bits)
> > static inline float
> > snorm_to_float(int x, unsigned src_bits)
> > {
> > - if (x == -MAX_INT(src_bits))
> > + if (x <= -MAX_INT(src_bits))
> > return -1.0f;
> > else
> > return x * (1.0f / (float)MAX_INT(src_bits));
> >
>
> The commit log talks about unorm_to_float, but the code modifies
> snorm_to_float. Also, I think something like
>
> mesa: Fix clamping to -1.0 in snorm_to_float
>
> would be a more useful shortlog.
>
>
> BTW, don't this function and unorm_to_float also need corresponding
> clamping to 1.0 for values >= MAX_INT(src_bits)?
>
Yes and no. Every place that we use [us]norm_to_*, we assume that the
value passed in is represented by the given number of bits. Therefore,
clamping above should always be useless. The one edge case is the signed
value MIN_INT(src_bits) (or, if you prefer, -MAX_INT(src_bits) - 1) in
which is representable in the given number of bits but is actually less
than -1 according to the formula. Technically, using an equality there was
Ok, it's just that I had it equal to the wrong thing. Adding the check
*probably* won't hurt as GCC *should* optimize it away, but I'd
double-check the generated code before being too sure about it.
>
>
> --
> Earthling Michel Dänzer | http://www.amd.com
> Libre software enthusiast | Mesa and X developer
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20141210/5463cd34/attachment.html>
More information about the mesa-dev
mailing list