From 0f709510f4ebed68c037b99bc59014151bf64222 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Sat, 11 Feb 2023 22:26:25 +0100 Subject: [PATCH] ac/llvm: Implement bvh64_intersect_ray_amd Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/llvm/ac_nir_to_llvm.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 76dffdd831f..30e5dc4c6aa 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -4312,6 +4312,27 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins ac_build_export(&ctx->ac, &args); break; } + case nir_intrinsic_bvh64_intersect_ray_amd: { + LLVMValueRef desc = get_src(ctx, instr->src[0]); + LLVMValueRef node_id = + LLVMBuildBitCast(ctx->ac.builder, get_src(ctx, instr->src[1]), ctx->ac.i64, ""); + LLVMValueRef t_max = + LLVMBuildBitCast(ctx->ac.builder, get_src(ctx, instr->src[2]), ctx->ac.f32, ""); + LLVMValueRef origin = + LLVMBuildBitCast(ctx->ac.builder, get_src(ctx, instr->src[3]), ctx->ac.v3f32, ""); + LLVMValueRef dir = + LLVMBuildBitCast(ctx->ac.builder, get_src(ctx, instr->src[4]), ctx->ac.v3f32, ""); + LLVMValueRef inv_dir = + LLVMBuildBitCast(ctx->ac.builder, get_src(ctx, instr->src[5]), ctx->ac.v3f32, ""); + + LLVMValueRef args[6] = { + node_id, t_max, origin, dir, inv_dir, desc, + }; + + result = ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.image.bvh.intersect.ray.i64.v3f32", + ctx->ac.v4i32, args, ARRAY_SIZE(args), 0); + break; + } default: fprintf(stderr, "Unknown intrinsic: "); nir_print_instr(&instr->instr, stderr);