[Mesa-dev] [PATCH] glsl: add ir_unop_b2d

Iago Toral Quiroga itoral at igalia.com
Tue Jan 12 06:48:23 PST 2016


For boolean to double conversions
---

Looks like d2b is present but this one was missing for some reason. I found
this while testing fp64 support on Intel.

I have the NIR and i965 implementation of this too but that is be part of
the fp64 enablement in NIR/i965 that is not ready for review yet.

I guess drivers that already implement fp64 should implement this operation
too.

 src/glsl/ir.cpp                                          | 1 +
 src/glsl/ir.h                                            | 1 +
 src/glsl/ir_validate.cpp                                 | 4 ++++
 src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp | 1 +
 src/mesa/program/ir_to_mesa.cpp                          | 1 +
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp               | 1 +
 6 files changed, 9 insertions(+)

diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index d82bccd..f4a6f85 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -518,6 +518,7 @@ static const char *const operator_strs[] = {
    "i2f",
    "f2b",
    "b2f",
+   "b2d",
    "i2b",
    "b2i",
    "u2f",
diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index 93e0734..f64fbec 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -1337,6 +1337,7 @@ enum ir_expression_operation {
    ir_unop_i2f,         /**< Integer-to-float conversion. */
    ir_unop_f2b,         /**< Float-to-boolean conversion */
    ir_unop_b2f,         /**< Boolean-to-float conversion */
+   ir_unop_b2d,         /**< Boolean-to-double conversion */
    ir_unop_i2b,         /**< int-to-boolean conversion */
    ir_unop_b2i,         /**< Boolean-to-int conversion */
    ir_unop_u2f,         /**< Unsigned-to-float conversion. */
diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
index dcc079c..7ae01a9 100644
--- a/src/glsl/ir_validate.cpp
+++ b/src/glsl/ir_validate.cpp
@@ -283,6 +283,10 @@ ir_validate::visit_leave(ir_expression *ir)
       assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL);
       assert(ir->type->base_type == GLSL_TYPE_FLOAT);
       break;
+   case ir_unop_b2d:
+      assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL);
+      assert(ir->type->base_type == GLSL_TYPE_DOUBLE);
+      break;
    case ir_unop_i2b:
       assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT);
       assert(ir->type->base_type == GLSL_TYPE_BOOL);
diff --git a/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp b/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp
index 78a8240..9e1b8aa 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp
@@ -434,6 +434,7 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir)
    case ir_unop_d2u:
    case ir_unop_u2d:
    case ir_unop_d2b:
+   case ir_unop_b2d:
       unreachable("no fp64 support yet");
    }
 
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 852655d..9d85cbc 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -1259,6 +1259,7 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
    case ir_unop_d2u:
    case ir_unop_u2d:
    case ir_unop_d2b:
+   case ir_unop_b2d:
    case ir_unop_frexp_sig:
    case ir_unop_frexp_exp:
       assert(!"not supported");
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 27a0a4f..676e378 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -2197,6 +2197,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
       break;
 
    case ir_unop_get_buffer_size:
+   case ir_unop_b2d:
       assert(!"Not implemented yet");
       break;
    }
-- 
1.9.1



More information about the mesa-dev mailing list