mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-03 11:08:17 +02:00
pan/nir: Fix 8 and 16 bool reduction lowering
OpenCL-CTS `test_relationals relational_any` fails on Panfrost with an
assertion:
```
src/panfrost/compiler/pan_nir_lower_bool_to_bitsize.c:296:
lower_alu_instr: Assertion `alu->def.bit_size > 1' failed.
```
Bool to bitsize pass handles 2, 3 and 4-wide boolean reduction, but does
not handle 8 and 16, which fall-through to the default case, producing
1-bit bools.
Fixes: 5de5987678 ("nir,panfrost: Move lower_bool_to_bitsize to
panfrost")
Signed-off-by: Ahmed Hesham <ahmed.hesham@arm.com>
Reviewed-by: Christoph Pillmayer <christoph.pillmayer@arm.com>
Reviewed-by: Eric R. Smith <eric.smith@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41770>
This commit is contained in:
parent
5a9e40f028
commit
2757fd1c44
1 changed files with 48 additions and 0 deletions
|
|
@ -114,15 +114,23 @@ lower_alu_instr(nir_builder *b, nir_alu_instr *alu)
|
|||
case nir_op_ball_fequal2:
|
||||
case nir_op_ball_fequal3:
|
||||
case nir_op_ball_fequal4:
|
||||
case nir_op_ball_fequal8:
|
||||
case nir_op_ball_fequal16:
|
||||
case nir_op_bany_fnequal2:
|
||||
case nir_op_bany_fnequal3:
|
||||
case nir_op_bany_fnequal4:
|
||||
case nir_op_bany_fnequal8:
|
||||
case nir_op_bany_fnequal16:
|
||||
case nir_op_ball_iequal2:
|
||||
case nir_op_ball_iequal3:
|
||||
case nir_op_ball_iequal4:
|
||||
case nir_op_ball_iequal8:
|
||||
case nir_op_ball_iequal16:
|
||||
case nir_op_bany_inequal2:
|
||||
case nir_op_bany_inequal3:
|
||||
case nir_op_bany_inequal4:
|
||||
case nir_op_bany_inequal8:
|
||||
case nir_op_bany_inequal16:
|
||||
case nir_op_ieq:
|
||||
case nir_op_ine:
|
||||
make_sources_canonical(b, alu, 0);
|
||||
|
|
@ -237,6 +245,16 @@ lower_alu_instr(nir_builder *b, nir_alu_instr *alu)
|
|||
: nir_op_b32all_fequal4;
|
||||
break;
|
||||
|
||||
case nir_op_ball_fequal8:
|
||||
opcode = bit_size == 8 ? nir_op_b8all_fequal8 : bit_size == 16 ? nir_op_b16all_fequal8
|
||||
: nir_op_b32all_fequal8;
|
||||
break;
|
||||
|
||||
case nir_op_ball_fequal16:
|
||||
opcode = bit_size == 8 ? nir_op_b8all_fequal16 : bit_size == 16 ? nir_op_b16all_fequal16
|
||||
: nir_op_b32all_fequal16;
|
||||
break;
|
||||
|
||||
case nir_op_bany_fnequal2:
|
||||
opcode = bit_size == 8 ? nir_op_b8any_fnequal2 : bit_size == 16 ? nir_op_b16any_fnequal2
|
||||
: nir_op_b32any_fnequal2;
|
||||
|
|
@ -252,6 +270,16 @@ lower_alu_instr(nir_builder *b, nir_alu_instr *alu)
|
|||
: nir_op_b32any_fnequal4;
|
||||
break;
|
||||
|
||||
case nir_op_bany_fnequal8:
|
||||
opcode = bit_size == 8 ? nir_op_b8any_fnequal8 : bit_size == 16 ? nir_op_b16any_fnequal8
|
||||
: nir_op_b32any_fnequal8;
|
||||
break;
|
||||
|
||||
case nir_op_bany_fnequal16:
|
||||
opcode = bit_size == 8 ? nir_op_b8any_fnequal16 : bit_size == 16 ? nir_op_b16any_fnequal16
|
||||
: nir_op_b32any_fnequal16;
|
||||
break;
|
||||
|
||||
case nir_op_ball_iequal2:
|
||||
opcode = bit_size == 8 ? nir_op_b8all_iequal2 : bit_size == 16 ? nir_op_b16all_iequal2
|
||||
: nir_op_b32all_iequal2;
|
||||
|
|
@ -267,6 +295,16 @@ lower_alu_instr(nir_builder *b, nir_alu_instr *alu)
|
|||
: nir_op_b32all_iequal4;
|
||||
break;
|
||||
|
||||
case nir_op_ball_iequal8:
|
||||
opcode = bit_size == 8 ? nir_op_b8all_iequal8 : bit_size == 16 ? nir_op_b16all_iequal8
|
||||
: nir_op_b32all_iequal8;
|
||||
break;
|
||||
|
||||
case nir_op_ball_iequal16:
|
||||
opcode = bit_size == 8 ? nir_op_b8all_iequal16 : bit_size == 16 ? nir_op_b16all_iequal16
|
||||
: nir_op_b32all_iequal16;
|
||||
break;
|
||||
|
||||
case nir_op_bany_inequal2:
|
||||
opcode = bit_size == 8 ? nir_op_b8any_inequal2 : bit_size == 16 ? nir_op_b16any_inequal2
|
||||
: nir_op_b32any_inequal2;
|
||||
|
|
@ -282,6 +320,16 @@ lower_alu_instr(nir_builder *b, nir_alu_instr *alu)
|
|||
: nir_op_b32any_inequal4;
|
||||
break;
|
||||
|
||||
case nir_op_bany_inequal8:
|
||||
opcode = bit_size == 8 ? nir_op_b8any_inequal8 : bit_size == 16 ? nir_op_b16any_inequal8
|
||||
: nir_op_b32any_inequal8;
|
||||
break;
|
||||
|
||||
case nir_op_bany_inequal16:
|
||||
opcode = bit_size == 8 ? nir_op_b8any_inequal16 : bit_size == 16 ? nir_op_b16any_inequal16
|
||||
: nir_op_b32any_inequal16;
|
||||
break;
|
||||
|
||||
case nir_op_bcsel:
|
||||
opcode = bit_size == 8 ? nir_op_b8csel : bit_size == 16 ? nir_op_b16csel
|
||||
: nir_op_b32csel;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue