diff options
author | Elie Tournier <tournier.elie@gmail.com> | 2017-05-30 14:49:25 +0100 |
---|---|---|
committer | Elie Tournier <tournier.elie@gmail.com> | 2017-05-30 14:49:25 +0100 |
commit | 85b7954cd4dd26881852c90ce202fea3e41cdcd7 (patch) | |
tree | baa116531fd9d6b1d76b8c6efb858ccc0833d010 | |
parent | 98b0083ae7f9966b486531d3785c787fa1b4e1a7 (diff) |
glsl: Add a lowering pass for 64-bit float f2d()
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 401906656a..7539653526 100644 --- a/src/compiler/glsl/ir_optimization.h +++ b/src/compiler/glsl/ir_optimization.h @@ -69,6 +69,7 @@ #define LT64 (1U << 8) #define ADD64 (1U << 9) #define SUB64 (1U << 10) +#define F2D (1U << 11) /** * \see class lower_packing_builtins_visitor diff --git a/src/compiler/glsl/lower_64bit.cpp b/src/compiler/glsl/lower_64bit.cpp index 2bd4a7a721..a6d61d6450 100644 --- a/src/compiler/glsl/lower_64bit.cpp +++ b/src/compiler/glsl/lower_64bit.cpp @@ -394,6 +394,14 @@ lower_64bit_visitor::handle_rvalue(ir_rvalue **rvalue) } break; + case ir_unop_f2d: + if (lowering(F2D)) { + if (ir->type->base_type == GLSL_TYPE_FLOAT) + *rvalue = handle_op(ir, "__builtin_fp32_to_64", generate_ir::fp32_to_fp64); + this->progress = true; + } + break; + case ir_unop_neg: if (lowering(NEG64)) { if (ir->type->base_type == GLSL_TYPE_DOUBLE) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index e75d6e2119..8bee7cedce 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -6959,7 +6959,8 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) ADD64 | SUB64 | MUL64 | - DIV64; + DIV64 | + F2D; lower_64bit_double_instructions(ir, lower_inst); } |