Mesa (master): radeon/ac/llvm: add support for sendmsg emission

Dave Airlie airlied at kemper.freedesktop.org
Tue Feb 14 00:03:40 UTC 2017


Module: Mesa
Branch: master
Commit: f32955be4374e4fe08c678d440e03d64cf028cc4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f32955be4374e4fe08c678d440e03d64cf028cc4

Author: Dave Airlie <airlied at redhat.com>
Date:   Mon Feb 13 22:08:30 2017 +0000

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 at amd.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/amd/common/ac_llvm_build.c | 13 +++++++++++++
 src/amd/common/ac_llvm_build.h | 12 ++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index afcbf31..20216a7 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 37a5bea..e88874a 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




More information about the mesa-commit mailing list