From: Dave Airlie <airl...@redhat.com> This fixes: dEQP-VK.glsl.builtin.function.common.isinf.*
v2: update to lower_isinf. Signed-off-by: Dave Airlie <airl...@redhat.com> --- src/amd/common/ac_nir_to_llvm.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 9a6b952..77e3a85 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -1181,6 +1181,17 @@ static LLVMValueRef emit_ddxy(struct nir_to_llvm_context *ctx, return result; } +static LLVMValueRef emit_isinf(struct nir_to_llvm_context *ctx, + nir_alu_instr *instr, + LLVMValueRef src0) +{ + LLVMTypeRef def_type = get_def_type(ctx, &instr->dest.dest.ssa); + src0 = emit_intrin_1f_param(ctx, "llvm.fabs", + to_float_type(ctx, def_type), src0); + src0 = emit_float_cmp(ctx, LLVMRealOEQ, src0, LLVMConstReal(ctx->f32, INFINITY)); + return src0; +} + /* * this takes an I,J coordinate pair, * and works out the X and Y derivatives. @@ -1544,6 +1555,9 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr) case nir_op_fddy_coarse: result = emit_ddxy(ctx, instr->op, src[0]); break; + case nir_op_isinf: + result = emit_isinf(ctx, instr, src[0]); + break; default: fprintf(stderr, "Unknown NIR alu instr: "); nir_print_instr(&instr->instr, stderr); -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev