radeon/ac/llvm: add support for sendmsg emission
This lets us use the new intrinsic on the correct version of llvm. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -750,3 +750,16 @@ ac_emit_ddxy(struct ac_llvm_context *ctx,
|
|||||||
result = LLVMBuildFSub(ctx->builder, trbl, tl, "");
|
result = LLVMBuildFSub(ctx->builder, trbl, tl, "");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ac_emit_sendmsg(struct ac_llvm_context *ctx,
|
||||||
|
uint32_t msg,
|
||||||
|
LLVMValueRef wave_id)
|
||||||
|
{
|
||||||
|
LLVMValueRef args[2];
|
||||||
|
const char *intr_name = (HAVE_LLVM < 0x0400) ? "llvm.SI.sendmsg" : "llvm.amdgcn.s.sendmsg";
|
||||||
|
args[0] = LLVMConstInt(ctx->i32, msg, false);
|
||||||
|
args[1] = wave_id;
|
||||||
|
ac_emit_llvm_intrinsic(ctx, intr_name, ctx->voidt,
|
||||||
|
args, 2, 0);
|
||||||
|
}
|
||||||
|
@@ -170,6 +170,18 @@ ac_emit_ddxy(struct ac_llvm_context *ctx,
|
|||||||
LLVMValueRef lds,
|
LLVMValueRef lds,
|
||||||
LLVMValueRef val);
|
LLVMValueRef val);
|
||||||
|
|
||||||
|
#define AC_SENDMSG_GS 2
|
||||||
|
#define AC_SENDMSG_GS_DONE 3
|
||||||
|
|
||||||
|
#define AC_SENDMSG_GS_OP_NOP (0 << 4)
|
||||||
|
#define AC_SENDMSG_GS_OP_CUT (1 << 4)
|
||||||
|
#define AC_SENDMSG_GS_OP_EMIT (2 << 4)
|
||||||
|
#define AC_SENDMSG_GS_OP_EMIT_CUT (3 << 4)
|
||||||
|
|
||||||
|
void ac_emit_sendmsg(struct ac_llvm_context *ctx,
|
||||||
|
uint32_t msg,
|
||||||
|
LLVMValueRef wave_id);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user