diff options
author | Elie Tournier <tournier.elie@gmail.com> | 2017-05-30 14:13:27 +0100 |
---|---|---|
committer | Elie Tournier <tournier.elie@gmail.com> | 2017-05-30 14:30:06 +0100 |
commit | 8a38a40cfa3aadf3d5b56ec1e708154ed6600607 (patch) | |
tree | f62f72563ab65fb030c4e9b9e2dc465a52671666 | |
parent | c04f29af8062b86e708115ad8c5ede962a9febb3 (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.h | 1 | ||||
-rw-r--r-- | src/compiler/glsl/lower_64bit.cpp | 8 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 3 |
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); } |