spirv: Use nir_bany/ball for OpAny/All

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5278>
This commit is contained in:
Jason Ekstrand
2020-05-28 23:00:21 -05:00
parent 8dfee57bdc
commit 953b7a3603
2 changed files with 8 additions and 32 deletions

View File

@@ -537,6 +537,12 @@ nir_ball_iequal(nir_builder *b, nir_ssa_def *src0, nir_ssa_def *src1)
}
}
static inline nir_ssa_def *
nir_ball(nir_builder *b, nir_ssa_def *src)
{
return nir_ball_iequal(b, src, nir_imm_true(b));
}
static inline nir_ssa_def *
nir_bany_inequal(nir_builder *b, nir_ssa_def *src0, nir_ssa_def *src1)
{

View File

@@ -442,41 +442,11 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode,
switch (opcode) {
case SpvOpAny:
if (src[0]->num_components == 1) {
val->ssa->def = nir_mov(&b->nb, src[0]);
} else {
nir_op op;
switch (src[0]->num_components) {
case 2: op = nir_op_bany_inequal2; break;
case 3: op = nir_op_bany_inequal3; break;
case 4: op = nir_op_bany_inequal4; break;
case 8: op = nir_op_bany_inequal8; break;
case 16: op = nir_op_bany_inequal16; break;
default: vtn_fail("invalid number of components");
}
val->ssa->def = nir_build_alu(&b->nb, op, src[0],
nir_imm_false(&b->nb),
NULL, NULL);
}
val->ssa->def = nir_bany(&b->nb, src[0]);
break;
case SpvOpAll:
if (src[0]->num_components == 1) {
val->ssa->def = nir_mov(&b->nb, src[0]);
} else {
nir_op op;
switch (src[0]->num_components) {
case 2: op = nir_op_ball_iequal2; break;
case 3: op = nir_op_ball_iequal3; break;
case 4: op = nir_op_ball_iequal4; break;
case 8: op = nir_op_ball_iequal8; break;
case 16: op = nir_op_ball_iequal16; break;
default: vtn_fail("invalid number of components");
}
val->ssa->def = nir_build_alu(&b->nb, op, src[0],
nir_imm_true(&b->nb),
NULL, NULL);
}
val->ssa->def = nir_ball(&b->nb, src[0]);
break;
case SpvOpOuterProduct: {