summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElie Tournier <tournier.elie@gmail.com>2017-05-30 14:13:27 +0100
committerElie Tournier <tournier.elie@gmail.com>2017-05-30 14:30:06 +0100
commit8a38a40cfa3aadf3d5b56ec1e708154ed6600607 (patch)
treef62f72563ab65fb030c4e9b9e2dc465a52671666
parentc04f29af8062b86e708115ad8c5ede962a9febb3 (diff)
glsl: Add a lowering pass for 64-bit float less()
Signed-off-by: Elie Tournier <tournier.elie@gmail.com>
-rw-r--r--src/compiler/glsl/ir_optimization.h1
-rw-r--r--src/compiler/glsl/lower_64bit.cpp8
-rw-r--r--src/mesa/state_tracker/st_glsl_to_tgsi.cpp3
3 files changed, 11 insertions, 1 deletions
diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h
index 42d7cc0af7..5a500245c5 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -66,6 +66,7 @@
#define NEG64 (1U << 5)
#define EQ64 (1U << 6)
#define LE64 (1U << 7)
+#define LT64 (1U << 8)
/**
* \see class lower_packing_builtins_visitor
diff --git a/src/compiler/glsl/lower_64bit.cpp b/src/compiler/glsl/lower_64bit.cpp
index 340cbaf1d8..df7eef5135 100644
--- a/src/compiler/glsl/lower_64bit.cpp
+++ b/src/compiler/glsl/lower_64bit.cpp
@@ -436,6 +436,14 @@ lower_64bit_visitor::handle_rvalue(ir_rvalue **rvalue)
}
break;
+ case ir_binop_less:
+ if (lowering(LT64)) {
+ if (ir->operands[0]->type->base_type == GLSL_TYPE_DOUBLE)
+ *rvalue = handle_op(ir, "__builtin_flt64", generate_ir::flt64);
+ this->progress = true;
+ }
+ break;
+
case ir_binop_mod:
if (lowering(MOD64)) {
if (ir->type->base_type == GLSL_TYPE_UINT64) {
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index e5db4e688d..de19ace19b 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -6954,7 +6954,8 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
unsigned lower_inst = ABS64 |
NEG64 |
EQ64 |
- LE64;
+ LE64 |
+ LT64;
lower_64bit_double_instructions(ir, lower_inst);
}