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:
@@ -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++) {
|
||||
|
Reference in New Issue
Block a user