It's correct in GLSL because the behaviour is undefined in presence of NaNs. But this seems incorrect in Vulkan.
Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> --- src/compiler/nir/nir.h | 6 ++++++ src/compiler/nir/nir_opt_algebraic.py | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index db935c8496b..4107c293962 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2188,6 +2188,12 @@ typedef struct nir_shader_compiler_options { /* Set if nir_lower_wpos_ytransform() should also invert gl_PointCoord. */ bool lower_wpos_pntc; + /* If false, lower ~inot(flt(a,b)) -> fge(a,b) and variants. + * In presence of NaNs, this is correct in GLSL because the behaviour is + * undefined. In Vulkan, doing these transformations is incorrect. + */ + bool exact_float_comparisons; + /** * Should nir_lower_io() create load_interpolated_input intrinsics? * diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index f2a7be0c403..3750874407b 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -154,10 +154,10 @@ optimizations = [ (('ishl', ('imul', a, '#b'), '#c'), ('imul', a, ('ishl', b, c))), # Comparison simplifications - (('~inot', ('flt', a, b)), ('fge', a, b)), - (('~inot', ('fge', a, b)), ('flt', a, b)), - (('~inot', ('feq', a, b)), ('fne', a, b)), - (('~inot', ('fne', a, b)), ('feq', a, b)), + (('~inot', ('flt', a, b)), ('fge', a, b), '!options->exact_float_comparisons'), + (('~inot', ('fge', a, b)), ('flt', a, b), '!options->exact_float_comparisons'), + (('~inot', ('feq', a, b)), ('fne', a, b), '!options->exact_float_comparisons'), + (('~inot', ('fne', a, b)), ('feq', a, b), '!options->exact_float_comparisons'), (('inot', ('ilt', a, b)), ('ige', a, b)), (('inot', ('ult', a, b)), ('uge', a, b)), (('inot', ('ige', a, b)), ('ilt', a, b)), -- 2.19.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev