mesa: Add new ir_unop_any() expression operation.

The previous any() implementation would generate arg0.x || arg0.y ||
arg0.z.  Having an expression operation for this makes it easy for the
backend to generate something easier (DPn + SNE for 915 FS, .any
predication on 965 VS)
This commit is contained in:
Eric Anholt
2010-08-23 12:21:33 -07:00
parent 47003a8f65
commit 5e9ac94cc4
7 changed files with 41 additions and 3 deletions

View File

@@ -149,6 +149,15 @@ ir_expression::constant_expression_value()
}
break;
case ir_unop_any:
assert(op[0]->type->is_boolean());
data.b[0] = false;
for (unsigned c = 0; c < op[0]->type->components(); c++) {
if (op[0]->value.b[c])
data.b[0] = true;
}
break;
case ir_unop_trunc:
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {