Reviewed-by: Ilia Mirkin <[email protected]>
On Sun, Jan 10, 2016 at 7:57 PM, Dave Airlie <[email protected]> wrote: > From: Dave Airlie <[email protected]> > > For the case where we convert a double to an int, we should > round the same as we do for floats. > > This fixes GL41-CTS.gpu_shader_fp64.state_query > > v2: add IROUNDD (Ilia) > > Signed-off-by: Dave Airlie <[email protected]> > --- > src/mesa/main/imports.h | 7 +++++++ > src/mesa/main/uniform_query.cpp | 2 +- > 2 files changed, 8 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h > index 042147f..ad7af5c 100644 > --- a/src/mesa/main/imports.h > +++ b/src/mesa/main/imports.h > @@ -151,6 +151,13 @@ static inline int IROUND(float f) > return (int) ((f >= 0.0F) ? (f + 0.5F) : (f - 0.5F)); > } > > +/** > + * Convert double to int by rounding to nearest integer, away from zero. > + */ > +static inline int IROUNDD(double d) > +{ > + return (int) ((d >= 0.0) ? (d + 0.5) : (d - 0.5)); > +} > > /** > * Convert float to int64 by rounding to nearest integer. > diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp > index b2ac65f..766a465 100644 > --- a/src/mesa/main/uniform_query.cpp > +++ b/src/mesa/main/uniform_query.cpp > @@ -437,7 +437,7 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, > GLint location, > dst[didx].i = src[sidx].i ? 1 : 0; > break; > case GLSL_TYPE_DOUBLE: > - dst[didx].i = *(double *)&src[sidx].f; > + dst[didx].i = IROUNDD(*(double *)&src[sidx].f); > break; > default: > assert(!"Should not get here."); > -- > 2.5.0 > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
