Mesa (master): radeonsi: set shader calling conventions

Bas Nieuwenhuizen bnieuwenhuizen at kemper.freedesktop.org
Wed Apr 6 19:58:17 UTC 2016


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

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Thu Mar 31 11:58:26 2016 +0200

radeonsi: set shader calling conventions

Note that old mesa + new LLVM or new mesa + old LLVM breaks
with this change and the corresponding LLVM change (D18559).

For LLVM version <= 3.8 we use the old method, but we can't detect
people using a post 3.8 svn version that is still too old.

Signed-off-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

---

 src/gallium/drivers/radeon/radeon_llvm_emit.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.c b/src/gallium/drivers/radeon/radeon_llvm_emit.c
index 474154e..7174132 100644
--- a/src/gallium/drivers/radeon/radeon_llvm_emit.c
+++ b/src/gallium/drivers/radeon/radeon_llvm_emit.c
@@ -55,6 +55,13 @@ enum radeon_llvm_shader_type {
 	RADEON_LLVM_SHADER_CS = 3,
 };
 
+enum radeon_llvm_calling_convention {
+	RADEON_LLVM_AMDGPU_VS = 87,
+	RADEON_LLVM_AMDGPU_GS = 88,
+	RADEON_LLVM_AMDGPU_PS = 89,
+	RADEON_LLVM_AMDGPU_CS = 90,
+};
+
 void radeon_llvm_add_attribute(LLVMValueRef F, const char *name, int value)
 {
 	char str[16];
@@ -71,27 +78,35 @@ void radeon_llvm_add_attribute(LLVMValueRef F, const char *name, int value)
 void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
 {
 	enum radeon_llvm_shader_type llvm_type;
+	enum radeon_llvm_calling_convention calling_conv;
 
 	switch (type) {
 	case TGSI_PROCESSOR_VERTEX:
 	case TGSI_PROCESSOR_TESS_CTRL:
 	case TGSI_PROCESSOR_TESS_EVAL:
 		llvm_type = RADEON_LLVM_SHADER_VS;
+		calling_conv = RADEON_LLVM_AMDGPU_VS;
 		break;
 	case TGSI_PROCESSOR_GEOMETRY:
 		llvm_type = RADEON_LLVM_SHADER_GS;
+		calling_conv = RADEON_LLVM_AMDGPU_GS;
 		break;
 	case TGSI_PROCESSOR_FRAGMENT:
 		llvm_type = RADEON_LLVM_SHADER_PS;
+		calling_conv = RADEON_LLVM_AMDGPU_PS;
 		break;
 	case TGSI_PROCESSOR_COMPUTE:
 		llvm_type = RADEON_LLVM_SHADER_CS;
+		calling_conv = RADEON_LLVM_AMDGPU_CS;
 		break;
 	default:
 		assert(0);
 	}
 
-	radeon_llvm_add_attribute(F, "ShaderType", llvm_type);
+	if (HAVE_LLVM >= 0x309)
+		LLVMSetFunctionCallConv(F, calling_conv);
+	else
+		radeon_llvm_add_attribute(F, "ShaderType", llvm_type);
 }
 
 static void init_r600_target()




More information about the mesa-commit mailing list