mesa: Set correct values for range/precision of shader integer types
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 20 Jan 2011 20:05:38 +0000 (12:05 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 20 Jan 2011 21:35:59 +0000 (13:35 -0800)
src/mesa/main/context.c

index fe370fa369ba79eb51f9b19cf8e1764082bfe495..e017939a45c55275b59b6ebce0591dc489145c7c 100644 (file)
@@ -534,8 +534,17 @@ init_program_limits(GLenum type, struct gl_program_constants *prog)
    prog->MediumFloat.RangeMax = 127;
    prog->MediumFloat.Precision = 23;
    prog->LowFloat = prog->HighFloat = prog->MediumFloat;
-   /* assume ints are stored as floats for now */
-   prog->LowInt = prog->MediumInt = prog->HighInt = prog->MediumFloat;
+
+   /* Assume ints are stored as floats for now, since this is the least-common
+    * denominator.  The OpenGL ES spec implies (page 132) that the precision
+    * of integer types should be 0.  Practically speaking, IEEE
+    * single-precision floating point values can only store integers in the
+    * range [-0x01000000, 0x01000000] without loss of precision.
+    */
+   prog->MediumInt.RangeMin = 24;
+   prog->MediumInt.RangeMax = 24;
+   prog->MediumInt.Precision = 0;
+   prog->LowInt = prog->HighInt = prog->MediumInt;
 }