The floating-point operations used to implement these have been carefully chosen to minimize rounding error while still getting decent performance. We don't want any optimizations to mess with them. While this shouldn't affect anything now, it seems like a good idea.
Signed-off-by: Connor Abbott <cwabbo...@gmail.com> --- src/compiler/nir/nir_lower_double_ops.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/compiler/nir/nir_lower_double_ops.c b/src/compiler/nir/nir_lower_double_ops.c index 7505fa3..42b94bb 100644 --- a/src/compiler/nir/nir_lower_double_ops.c +++ b/src/compiler/nir/nir_lower_double_ops.c @@ -142,8 +142,10 @@ lower_rcp(nir_builder *b, nir_ssa_def *src) * See https://en.wikipedia.org/wiki/Division_algorithm for more details. */ + b->exact = true; ra = nir_ffma(b, ra, nir_ffma(b, ra, src, nir_imm_double(b, -1)), ra); ra = nir_ffma(b, ra, nir_ffma(b, ra, src, nir_imm_double(b, -1)), ra); + b->exact = false; return fix_inv_result(b, ra, src, new_exp); } @@ -267,6 +269,7 @@ lower_sqrt_rsq(nir_builder *b, nir_ssa_def *src, bool sqrt) * (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots). */ + b->exact = true; nir_ssa_def *one_half = nir_imm_double(b, 0.5); nir_ssa_def *h_0 = nir_fmul(b, one_half, ra); nir_ssa_def *g_0 = nir_fmul(b, src, ra); @@ -283,6 +286,7 @@ lower_sqrt_rsq(nir_builder *b, nir_ssa_def *src, bool sqrt) one_half); res = nir_ffma(b, y_1, r_1, y_1); } + b->exact = false; if (sqrt) { /* Here, the special cases we need to handle are -- 2.5.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev