ir_to_mesa: Implement min and max expressions.
authorEric Anholt <eric@anholt.net>
Wed, 19 May 2010 23:10:37 +0000 (16:10 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 24 Jun 2010 22:05:21 +0000 (15:05 -0700)
fixes glsl-orangebook-ch06-bump.frag.

ir_to_mesa.cpp
mesa_codegen.brg

index 4238d9a8c81489bb0a3d48026d45a3106befafdf..59ee3b29f0a4aecf3117d31e3d09a22efe8355ef 100644 (file)
@@ -529,6 +529,12 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
    case ir_unop_floor:
       this->result = this->create_tree(MB_TERM_floor_vec4, ir, op[0], NULL);
       break;
+   case ir_binop_min:
+      this->result = this->create_tree(MB_TERM_min_vec4_vec4, ir, op[0], op[1]);
+      break;
+   case ir_binop_max:
+      this->result = this->create_tree(MB_TERM_max_vec4_vec4, ir, op[0], op[1]);
+      break;
    default:
       break;
    }
index 25c0c47c02f12832d52d1cf73275abbc8f62101e..d53ccf390704e4ec46ae0605c5739ad36b739626 100644 (file)
@@ -74,6 +74,8 @@
 %term sqrt_vec4
 %term rsq_vec4
 %term swizzle_vec4
+%term min_vec4_vec4
+%term max_vec4_vec4
 
 # Each tree will produce stmt.  Currently, the only production for
 # stmt is from an assign rule -- every statement tree from
@@ -273,4 +275,7 @@ vec4: log2_vec4(vec4) 1
                                   tree->left->src_reg);
 }
 
+vec4: min_vec4_vec4(vec4, vec4) 1 { ir_to_mesa_emit_op2(tree, OPCODE_MIN); }
+vec4: max_vec4_vec4(vec4, vec4) 1 { ir_to_mesa_emit_op2(tree, OPCODE_MAX); }
+
 %%