Module: Mesa Branch: 17.1 Commit: 072b1f5270ef76f997ee33a1397e14c9eeecbc35 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=072b1f5270ef76f997ee33a1397e14c9eeecbc35
Author: Dave Airlie <[email protected]> Date: Fri Mar 17 13:38:41 2017 +1000 radv/ac: canonicalize the output for 32-bit float min/max. This fixes: dEQP-VK.glsl.builtin.precision.min.* dEQP-VK.glsl.builtin.precision.max.* dEQP-VK.glsl.builtin.precision.clamp.* The problem is the hw doesn't compare denorms properly, so we have to flush them, even though the spec says flushing is optional, if you don't flush the results should be correct. The -pro driver changes the shader float mode, it would be nice if llvm could grow that perhaps. Acked-by: Bas Nieuwenhuizen <[email protected]> Signed-off-by: Dave Airlie <[email protected]> (cherry picked from commit 3bf3f9866c1387872521242921bb00c7fb7c2834) --- src/amd/common/ac_nir_to_llvm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 43d0520541..43a79b833b 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -1653,10 +1653,18 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr) case nir_op_fmax: result = emit_intrin_2f_param(ctx, "llvm.maxnum", to_float_type(ctx, def_type), src[0], src[1]); + if (instr->dest.dest.ssa.bit_size == 32) + result = emit_intrin_1f_param(ctx, "llvm.canonicalize", + to_float_type(ctx, def_type), + result); break; case nir_op_fmin: result = emit_intrin_2f_param(ctx, "llvm.minnum", to_float_type(ctx, def_type), src[0], src[1]); + if (instr->dest.dest.ssa.bit_size == 32) + result = emit_intrin_1f_param(ctx, "llvm.canonicalize", + to_float_type(ctx, def_type), + result); break; case nir_op_ffma: result = emit_intrin_3f_param(ctx, "llvm.fma", _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
