[Mesa-dev] [PATCH] mesa/uniform_query: add IROUNDD and use for doubles->ints (v2)

Dave Airlie airlied at gmail.com
Sun Jan 10 16:57:23 PST 2016


From: Dave Airlie <airlied at redhat.com>

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 <airlied at redhat.com>
---
 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



More information about the mesa-dev mailing list