mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 15:40:11 +01:00
nir: Add posibility to not lower to source mod 'abs' for ops with three sources
This is useful for r600 since there the abs source modifier is not supported for ops with three sources v2: Use correct logic to enable lowering to abs source mod (Eric Anhold) Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
ce112fcc87
commit
b7201a468d
2 changed files with 8 additions and 1 deletions
|
|
@ -3205,7 +3205,8 @@ bool nir_lower_atomics_to_ssbo(nir_shader *shader, unsigned ssbo_offset);
|
|||
typedef enum {
|
||||
nir_lower_int_source_mods = 1 << 0,
|
||||
nir_lower_float_source_mods = 1 << 1,
|
||||
nir_lower_all_source_mods = (1 << 2) - 1
|
||||
nir_lower_triop_abs = 1 << 2,
|
||||
nir_lower_all_source_mods = (1 << 3) - 1
|
||||
} nir_lower_to_source_mods_flags;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@ nir_lower_to_source_mods_block(nir_block *block,
|
|||
|
||||
nir_alu_instr *alu = nir_instr_as_alu(instr);
|
||||
|
||||
bool lower_abs = (nir_op_infos[alu->op].num_inputs < 3) ||
|
||||
(options & nir_lower_triop_abs);
|
||||
|
||||
for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) {
|
||||
if (!alu->src[i].src.is_ssa)
|
||||
continue;
|
||||
|
|
@ -81,6 +84,9 @@ nir_lower_to_source_mods_block(nir_block *block,
|
|||
if (!parent->src[0].src.is_ssa)
|
||||
continue;
|
||||
|
||||
if (!lower_abs && parent->src[0].abs)
|
||||
continue;
|
||||
|
||||
nir_instr_rewrite_src(instr, &alu->src[i].src, parent->src[0].src);
|
||||
if (alu->src[i].abs) {
|
||||
/* abs trumps both neg and abs, do nothing */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue