nir: Split the flag for lowering of fabs and fneg to source modifiers.

i915 and r300 have fneg source modifier but not fabs, and doing it in NIR
can save us some backend pain.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14938>
This commit is contained in:
Emma Anholt 2022-02-08 10:07:51 -08:00
parent bd24f418c3
commit f4ee7146f9
2 changed files with 9 additions and 5 deletions

View File

@ -5070,12 +5070,14 @@ bool nir_lower_atomics_to_ssbo(nir_shader *shader);
typedef enum {
nir_lower_int_source_mods = 1 << 0,
nir_lower_float_source_mods = 1 << 1,
nir_lower_64bit_source_mods = 1 << 2,
nir_lower_triop_abs = 1 << 3,
nir_lower_all_source_mods = (1 << 4) - 1
nir_lower_fabs_source_mods = 1 << 1,
nir_lower_fneg_source_mods = 1 << 2,
nir_lower_64bit_source_mods = 1 << 3,
nir_lower_triop_abs = 1 << 4,
nir_lower_all_source_mods = (1 << 5) - 1
} nir_lower_to_source_mods_flags;
#define nir_lower_float_source_mods (nir_lower_fabs_source_mods | nir_lower_fneg_source_mods)
bool nir_lower_to_source_mods(nir_shader *shader, nir_lower_to_source_mods_flags options);

View File

@ -78,8 +78,10 @@ nir_lower_to_source_mods_block(nir_block *block,
case nir_type_float:
if (!(options & nir_lower_float_source_mods))
continue;
if (parent->op != nir_op_fabs && parent->op != nir_op_fneg)
if (!(parent->op == nir_op_fabs && (options & nir_lower_fabs_source_mods)) &&
!(parent->op == nir_op_fneg && (options & nir_lower_fneg_source_mods))) {
continue;
}
break;
case nir_type_int:
if (!(options & nir_lower_int_source_mods))