summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2017-02-13 22:08:30 +0000
committerDave Airlie <[email protected]>2017-02-14 00:02:50 +0000
commitf32955be4374e4fe08c678d440e03d64cf028cc4 (patch)
tree34557be49a56b40651e9c81501e5c63b37332f00 /src
parentf77d2871ac7073b81c45c54878c3234e51bcd017 (diff)
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 <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/amd/common/ac_llvm_build.c13
-rw-r--r--src/amd/common/ac_llvm_build.h12
2 files changed, 25 insertions, 0 deletions
diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index afcbf319995..20216a74947 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -750,3 +750,16 @@ ac_emit_ddxy(struct ac_llvm_context *ctx,
result = LLVMBuildFSub(ctx->builder, trbl, tl, "");
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);
+}
diff --git a/src/amd/common/ac_llvm_build.h b/src/amd/common/ac_llvm_build.h
index 37a5bea3f06..e88874ad46b 100644
--- a/src/amd/common/ac_llvm_build.h
+++ b/src/amd/common/ac_llvm_build.h
@@ -170,6 +170,18 @@ ac_emit_ddxy(struct ac_llvm_context *ctx,
LLVMValueRef lds,
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
}
#endif