summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ir_to_mesa.cpp3
-rw-r--r--mesa_codegen.brg8
2 files changed, 11 insertions, 0 deletions
diff --git a/ir_to_mesa.cpp b/ir_to_mesa.cpp
index 3fed157779..b28747e6a2 100644
--- a/ir_to_mesa.cpp
+++ b/ir_to_mesa.cpp
@@ -361,6 +361,9 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
case ir_unop_sqrt:
this->result = this->create_tree(MB_TERM_sqrt_vec4, ir, op[0], op[1]);
break;
+ case ir_unop_rsq:
+ this->result = this->create_tree(MB_TERM_rsq_vec4, ir, op[0], op[1]);
+ break;
case ir_unop_i2f:
/* Mesa IR lacks types, ints are stored as floats. */
this->result = op[0];
diff --git a/mesa_codegen.brg b/mesa_codegen.brg
index ed9afdc57c..e8d499fd74 100644
--- a/mesa_codegen.brg
+++ b/mesa_codegen.brg
@@ -60,6 +60,7 @@
%term dp3_vec4_vec4
%term dp2_vec4_vec4
%term sqrt_vec4
+%term rsq_vec4
%term swizzle_vec4
# Each tree will produce stmt. Currently, the only production for
@@ -209,6 +210,13 @@ vec4: sqrt_vec4(vec4) 1
tree->src_reg);
}
+vec4: rsq_vec4(vec4) 1
+{
+ ir_to_mesa_emit_scalar_op1(tree, OPCODE_RSQ,
+ tree->dst_reg,
+ tree->left->src_reg);
+}
+
vec4: exp_vec4(vec4) 1
{
ir_to_mesa_emit_scalar_op1(tree, OPCODE_EXP,