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

Reply via email to