mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
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 <bas@basnieuwenhuizen.nl> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
83e58b036e
commit
3bf3f9866c
1 changed files with 8 additions and 0 deletions
|
|
@ -1748,10 +1748,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",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue