Mesa (master): util/format: Generate floating point constants for clamping.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Sat Nov 8 10:33:44 UTC 2014


Module: Mesa
Branch: master
Commit: d268eac3a9c81febc5efcae7fe6854045bfc5144
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d268eac3a9c81febc5efcae7fe6854045bfc5144

Author: José Fonseca <jfonseca at vmware.com>
Date:   Fri Nov  7 14:26:58 2014 +0000

util/format: Generate floating point constants for clamping.

This commit causes the generated C code to change as

            union util_format_r32g32b32a32_sscaled pixel;
  -         pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648, 2147483647);
  -         pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648, 2147483647);
  -         pixel.chan.b = (int32_t)CLAMP(src[2], -2147483648, 2147483647);
  -         pixel.chan.a = (int32_t)CLAMP(src[3], -2147483648, 2147483647);
  +         pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648.0f, 2147483647.0f);
  +         pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648.0f, 2147483647.0f);
  +         pixel.chan.b = (int32_t)CLAMP(src[2], -2147483648.0f, 2147483647.0f);
  +         pixel.chan.a = (int32_t)CLAMP(src[3], -2147483648.0f, 2147483647.0f);
            memcpy(dst, &pixel, sizeof pixel);

which surprisingly makes a difference for MSVC.

Thanks to Juraj Svec for diagnosing this and drafting a fix.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=29661

---

 src/gallium/auxiliary/util/u_format_pack.py |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_format_pack.py b/src/gallium/auxiliary/util/u_format_pack.py
index 6ccf04c..90f348e 100644
--- a/src/gallium/auxiliary/util/u_format_pack.py
+++ b/src/gallium/auxiliary/util/u_format_pack.py
@@ -226,9 +226,9 @@ def native_to_constant(type, value):
     '''Get the value of unity for this type.'''
     if type.type == FLOAT:
         if type.size <= 32:
-            return "%ff" % value 
+            return "%.1ff" % float(value)
         else:
-            return "%ff" % value 
+            return "%.1f" % float(value)
     else:
         return str(int(value))
 
@@ -251,8 +251,8 @@ def clamp_expr(src_channel, dst_channel, dst_native_type, value):
     dst_max = dst_channel.max()
     
     # Translate the destination range to the src native value
-    dst_min_native = value_to_native(src_channel, dst_min)
-    dst_max_native = value_to_native(src_channel, dst_max)
+    dst_min_native = native_to_constant(src_channel, value_to_native(src_channel, dst_min))
+    dst_max_native = native_to_constant(src_channel, value_to_native(src_channel, dst_max))
 
     if src_min < dst_min and src_max > dst_max:
         return 'CLAMP(%s, %s, %s)' % (value, dst_min_native, dst_max_native)




More information about the mesa-commit mailing list