aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/glsl/ir_constant_expression.cpp
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-09-18 08:09:44 +0200
committermarha <marha@users.sourceforge.net>2013-09-18 08:09:44 +0200
commit09bfe74fc7d4a6f97eddb034df371e66e314ea12 (patch)
treeb63caf666a8c36ddcc9a4202f7cecac49998e98d /mesalib/src/glsl/ir_constant_expression.cpp
parent5a54fa6e45ee10cf58ee1b6d2eb5522a24bb8745 (diff)
parent7f669a708bd35bdf8e842f762ec68f9ad0ec0486 (diff)
downloadvcxsrv-09bfe74fc7d4a6f97eddb034df371e66e314ea12.tar.gz
vcxsrv-09bfe74fc7d4a6f97eddb034df371e66e314ea12.tar.bz2
vcxsrv-09bfe74fc7d4a6f97eddb034df371e66e314ea12.zip
Merge remote-tracking branch 'origin/released'
* origin/released: libX11 mesa pixman xserver git update 18 Sep 2013 Conflicts: pixman/pixman/pixman-sse2.c
Diffstat (limited to 'mesalib/src/glsl/ir_constant_expression.cpp')
-rw-r--r--mesalib/src/glsl/ir_constant_expression.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/mesalib/src/glsl/ir_constant_expression.cpp b/mesalib/src/glsl/ir_constant_expression.cpp
index a67470bf3..4579ef209 100644
--- a/mesalib/src/glsl/ir_constant_expression.cpp
+++ b/mesalib/src/glsl/ir_constant_expression.cpp
@@ -394,6 +394,7 @@ ir_expression::constant_expression_value(struct hash_table *variable_context)
switch (this->operation) {
case ir_binop_lshift:
case ir_binop_rshift:
+ case ir_binop_ldexp:
case ir_binop_vector_extract:
case ir_triop_csel:
case ir_triop_bitfield_extract:
@@ -1376,6 +1377,15 @@ ir_expression::constant_expression_value(struct hash_table *variable_context)
break;
}
+ case ir_binop_ldexp:
+ for (unsigned c = 0; c < components; c++) {
+ data.f[c] = ldexp(op[0]->value.f[c], op[1]->value.i[c]);
+ /* Flush subnormal values to zero. */
+ if (!isnormal(data.f[c]))
+ data.f[c] = copysign(0.0, op[0]->value.f[c]);
+ }
+ break;
+
case ir_triop_fma:
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
assert(op[1]->type->base_type == GLSL_TYPE_FLOAT);