From b3cc10f3b24527e06da175cb8422f1e4f301cd87 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 19 Jan 2016 17:34:24 -0800 Subject: [PATCH] nir: Let nir_opt_algebraic rules contain unsigned constants > INT_MAX. struct.pack('i', val) interprets `val` as a signed integer, and dies if `val` > INT_MAX. For larger constants, we need to use 'I' which interprets it as an unsigned value. This patch makes us use 'I' for all values >= 0, and 'i' for negative values. This should work in all cases. Signed-off-by: Kenneth Graunke --- src/glsl/nir/nir_algebraic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/glsl/nir/nir_algebraic.py b/src/glsl/nir/nir_algebraic.py index a30652f..14c0e82 100644 --- a/src/glsl/nir/nir_algebraic.py +++ b/src/glsl/nir/nir_algebraic.py @@ -108,7 +108,7 @@ class Constant(Value): if isinstance(self.value, (bool)): return 'NIR_TRUE' if self.value else 'NIR_FALSE' if isinstance(self.value, (int, long)): - return hex(struct.unpack('I', struct.pack('i', self.value))[0]) + return hex(struct.unpack('I', struct.pack('i' if self.value < 0 else 'I', self.value))[0]) elif isinstance(self.value, float): return hex(struct.unpack('I', struct.pack('f', self.value))[0]) else: -- 2.7.4