View | Details | Raw Unified | Return to bug 240722 | Differences between
and this patch

Collapse All | Expand All

(-)b/graphics/mesa-dri/Makefile (-1 / +1 lines)
Lines 3-9 Link Here
3
3
4
PORTNAME=	mesa-dri
4
PORTNAME=	mesa-dri
5
PORTVERSION=	${MESAVERSION}
5
PORTVERSION=	${MESAVERSION}
6
PORTREVISION=	5
6
PORTREVISION=	6
7
CATEGORIES=	graphics
7
CATEGORIES=	graphics
8
8
9
COMMENT=	OpenGL hardware acceleration drivers for DRI2+
9
COMMENT=	OpenGL hardware acceleration drivers for DRI2+
(-)b/graphics/mesa-dri/files/patch-0a7e767 (+23 lines)
Added Link Here
1
https://gitlab.freedesktop.org/mesa/mesa/commit/0a7e767e5869
2
3
--- src/amd/vulkan/radv_shader.c.orig	2019-01-17 11:26:22 UTC
4
+++ src/amd/vulkan/radv_shader.c
5
@@ -548,9 +548,15 @@ static void radv_init_llvm_target()
6
 	 *
7
 	 * "mesa" is the prefix for error messages.
8
 	 */
9
-	const char *argv[3] = { "mesa", "-simplifycfg-sink-common=false",
10
-				"-amdgpu-skip-threshold=1" };
11
-	LLVMParseCommandLineOptions(3, argv, NULL);
12
+	if (HAVE_LLVM >= 0x0800) {
13
+		const char *argv[2] = { "mesa", "-simplifycfg-sink-common=false" };
14
+		LLVMParseCommandLineOptions(2, argv, NULL);
15
+
16
+	} else {
17
+		const char *argv[3] = { "mesa", "-simplifycfg-sink-common=false",
18
+					"-amdgpu-skip-threshold=1" };
19
+		LLVMParseCommandLineOptions(3, argv, NULL);
20
+	}
21
 }
22
 
23
 static once_flag radv_init_llvm_target_once_flag = ONCE_FLAG_INIT;
(-)b/graphics/mesa-dri/files/patch-39d0c68 (+16 lines)
Added Link Here
1
https://gitlab.freedesktop.org/mesa/mesa/commit/39d0c68321df
2
3
--- src/amd/common/ac_llvm_build.c.orig	2019-01-17 11:26:22 UTC
4
+++ src/amd/common/ac_llvm_build.c
5
@@ -401,8 +401,9 @@ ac_build_optimization_barrier(struct ac_llvm_context *
6
 LLVMValueRef
7
 ac_build_shader_clock(struct ac_llvm_context *ctx)
8
 {
9
-	LLVMValueRef tmp = ac_build_intrinsic(ctx, "llvm.readcyclecounter",
10
-					      ctx->i64, NULL, 0, 0);
11
+	const char *intr = HAVE_LLVM >= 0x0900 && ctx->chip_class >= VI ?
12
+				"llvm.amdgcn.s.memrealtime" : "llvm.readcyclecounter";
13
+	LLVMValueRef tmp = ac_build_intrinsic(ctx, intr, ctx->i64, NULL, 0, 0);
14
 	return LLVMBuildBitCast(ctx->builder, tmp, ctx->v2i32, "");
15
 }
16
 
(-)b/graphics/mesa-dri/files/patch-3e249b8 (+13 lines)
Added Link Here
1
https://gitlab.freedesktop.org/mesa/mesa/commit/3e249b853ebb
2
3
--- src/amd/common/ac_llvm_util.c.orig	2019-01-17 11:26:22 UTC
4
+++ src/amd/common/ac_llvm_util.c
5
@@ -136,7 +136,7 @@ const char *ac_get_llvm_processor_name(enum radeon_fam
6
 	case CHIP_VEGA20:
7
 		return HAVE_LLVM >= 0x0700 ? "gfx906" : "gfx902";
8
 	case CHIP_RAVEN2:
9
-		return "gfx902"; /* TODO: use gfx909 when it's available */
10
+		return HAVE_LLVM >= 0x0800 ? "gfx909" : "gfx902";
11
 	default:
12
 		return "";
13
 	}
(-)b/graphics/mesa-dri/files/patch-648dc52 (+94 lines)
Added Link Here
1
https://gitlab.freedesktop.org/mesa/mesa/commit/648dc52367c6
2
3
--- src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c.orig	2019-01-17 11:26:22 UTC
4
+++ src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
5
@@ -698,17 +698,25 @@ static void store_emit(
6
 	}
7
 
8
 	if (target == TGSI_TEXTURE_BUFFER) {
9
-		LLVMValueRef buf_args[] = {
10
+		LLVMValueRef buf_args[6] = {
11
 			value,
12
 			args.resource,
13
 			vindex,
14
 			ctx->i32_0, /* voffset */
15
-			LLVMConstInt(ctx->i1, !!(args.cache_policy & ac_glc), 0),
16
-			LLVMConstInt(ctx->i1, !!(args.cache_policy & ac_slc), 0),
17
 		};
18
 
19
+		if (HAVE_LLVM >= 0x0800) {
20
+			buf_args[4] = ctx->i32_0; /* soffset */
21
+			buf_args[5] = LLVMConstInt(ctx->i1, args.cache_policy, 0);
22
+		} else {
23
+			buf_args[4] = LLVMConstInt(ctx->i1, !!(args.cache_policy & ac_glc), 0);
24
+			buf_args[5] = LLVMConstInt(ctx->i1, !!(args.cache_policy & ac_slc), 0);
25
+		}
26
+
27
 		emit_data->output[emit_data->chan] = ac_build_intrinsic(
28
-			&ctx->ac, "llvm.amdgcn.buffer.store.format.v4f32",
29
+			&ctx->ac,
30
+			HAVE_LLVM >= 0x0800 ? "llvm.amdgcn.struct.buffer.store.format.v4f32" :
31
+					      "llvm.amdgcn.buffer.store.format.v4f32",
32
 			ctx->voidt, buf_args, 6,
33
 			ac_get_store_intr_attribs(writeonly_memory));
34
 	} else {
35
@@ -830,8 +838,35 @@ static void atomic_emit(
36
 		vindex = args.coords[0]; /* for buffers only */
37
 	}
38
 
39
-	if (inst->Src[0].Register.File == TGSI_FILE_BUFFER ||
40
+	if (HAVE_LLVM >= 0x0800 &&
41
+	    inst->Src[0].Register.File != TGSI_FILE_BUFFER &&
42
 	    inst->Memory.Texture == TGSI_TEXTURE_BUFFER) {
43
+		LLVMValueRef buf_args[7];
44
+		unsigned num_args = 0;
45
+
46
+		buf_args[num_args++] = args.data[0];
47
+		if (inst->Instruction.Opcode == TGSI_OPCODE_ATOMCAS)
48
+			buf_args[num_args++] = args.data[1];
49
+
50
+		buf_args[num_args++] = args.resource;
51
+		buf_args[num_args++] = vindex;
52
+		buf_args[num_args++] = voffset;
53
+		buf_args[num_args++] = ctx->i32_0; /* soffset */
54
+		buf_args[num_args++] = LLVMConstInt(ctx->i32, args.cache_policy & ac_slc, 0);
55
+
56
+		char intrinsic_name[64];
57
+		snprintf(intrinsic_name, sizeof(intrinsic_name),
58
+			 "llvm.amdgcn.struct.buffer.atomic.%s", action->intr_name);
59
+		emit_data->output[emit_data->chan] =
60
+			ac_to_float(&ctx->ac,
61
+				    ac_build_intrinsic(&ctx->ac, intrinsic_name,
62
+						       ctx->i32, buf_args, num_args, 0));
63
+		return;
64
+	}
65
+
66
+	if (inst->Src[0].Register.File == TGSI_FILE_BUFFER ||
67
+	    (HAVE_LLVM < 0x0800 &&
68
+	     inst->Memory.Texture == TGSI_TEXTURE_BUFFER)) {
69
 		LLVMValueRef buf_args[7];
70
 		unsigned num_args = 0;
71
 
72
 src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 45 ++++++++++++++++++++---
73
 src/gallium/drivers/radeonsi/si_state.c           |  7 +---
74
 2 files changed, 42 insertions(+), 10 deletions(-)
75
76
--- src/gallium/drivers/radeonsi/si_state.c.orig	2019-01-17 11:26:22 UTC
77
+++ src/gallium/drivers/radeonsi/si_state.c
78
@@ -3613,14 +3613,11 @@ si_make_buffer_descriptor(struct si_screen *screen, st
79
 	 * - For VMEM and inst.IDXEN == 0 or STRIDE == 0, it's in byte units.
80
 	 * - For VMEM and inst.IDXEN == 1 and STRIDE != 0, it's in units of STRIDE.
81
 	 */
82
-	if (screen->info.chip_class >= GFX9)
83
-		/* When vindex == 0, LLVM sets IDXEN = 0, thus changing units
84
+	if (screen->info.chip_class >= GFX9 && HAVE_LLVM < 0x0800)
85
+		/* When vindex == 0, LLVM < 8.0 sets IDXEN = 0, thus changing units
86
 		 * from STRIDE to bytes. This works around it by setting
87
 		 * NUM_RECORDS to at least the size of one element, so that
88
 		 * the first element is readable when IDXEN == 0.
89
-		 *
90
-		 * TODO: Fix this in LLVM, but do we need a new intrinsic where
91
-		 *       IDXEN is enforced?
92
 		 */
93
 		num_records = num_records ? MAX2(num_records, stride) : 0;
94
 	else if (screen->info.chip_class == VI)
(-)b/graphics/mesa-dri/files/patch-b5012a0 (+13 lines)
Added Link Here
1
https://gitlab.freedesktop.org/mesa/mesa/commit/b5012a05185c
2
3
--- src/amd/common/ac_llvm_build.c.orig	2019-01-17 11:26:22 UTC
4
+++ src/amd/common/ac_llvm_build.c
5
@@ -424,7 +424,7 @@ ac_build_ballot(struct ac_llvm_context *ctx,
6
 	args[0] = ac_to_integer(ctx, args[0]);
7
 
8
 	return ac_build_intrinsic(ctx,
9
-				  "llvm.amdgcn.icmp.i32",
10
+				  HAVE_LLVM >= 0x900 ? "llvm.amdgcn.icmp.i64.i32" : "llvm.amdgcn.icmp.i32",
11
 				  ctx->i64, args, 3,
12
 				  AC_FUNC_ATTR_NOUNWIND |
13
 				  AC_FUNC_ATTR_READNONE |
(-)b/graphics/mesa-dri/files/patch-dded2ed (+46 lines)
Added Link Here
1
https://gitlab.freedesktop.org/mesa/mesa/commit/dded2edf8bed
2
3
--- src/gallium/auxiliary/gallivm/lp_bld_arit.c.orig	2019-01-17 11:26:22 UTC
4
+++ src/gallium/auxiliary/gallivm/lp_bld_arit.c
5
@@ -555,6 +555,12 @@ lp_build_add(struct lp_build_context *bld,
6
         return bld->one;
7
 
8
       if (!type.floating && !type.fixed) {
9
+         if (HAVE_LLVM >= 0x0900) {
10
+            char intrin[32];
11
+            intrinsic = type.sign ? "llvm.sadd.sat" : "llvm.uadd.sat";
12
+            lp_format_intrinsic(intrin, sizeof intrin, intrinsic, bld->vec_type);
13
+            return lp_build_intrinsic_binary(builder, intrin, bld->vec_type, a, b);
14
+         }
15
          if (type.width * type.length == 128) {
16
             if (util_cpu_caps.has_sse2) {
17
                if (type.width == 8)
18
@@ -625,6 +631,7 @@ lp_build_add(struct lp_build_context *bld,
19
           * NOTE: cmp/select does sext/trunc of the mask. Does not seem to
20
           * interfere with llvm's ability to recognize the pattern but seems
21
           * a bit brittle.
22
+          * NOTE: llvm 9+ always uses (non arch specific) intrinsic.
23
           */
24
          LLVMValueRef overflowed = lp_build_cmp(bld, PIPE_FUNC_GREATER, a, res);
25
          res = lp_build_select(bld, overflowed,
26
@@ -876,6 +883,12 @@ lp_build_sub(struct lp_build_context *bld,
27
         return bld->zero;
28
 
29
       if (!type.floating && !type.fixed) {
30
+         if (HAVE_LLVM >= 0x0900) {
31
+            char intrin[32];
32
+            intrinsic = type.sign ? "llvm.ssub.sat" : "llvm.usub.sat";
33
+            lp_format_intrinsic(intrin, sizeof intrin, intrinsic, bld->vec_type);
34
+            return lp_build_intrinsic_binary(builder, intrin, bld->vec_type, a, b);
35
+         }
36
          if (type.width * type.length == 128) {
37
             if (util_cpu_caps.has_sse2) {
38
                if (type.width == 8)
39
@@ -925,6 +938,7 @@ lp_build_sub(struct lp_build_context *bld,
40
           * NOTE: cmp/select does sext/trunc of the mask. Does not seem to
41
           * interfere with llvm's ability to recognize the pattern but seems
42
           * a bit brittle.
43
+          * NOTE: llvm 9+ always uses (non arch specific) intrinsic.
44
           */
45
          LLVMValueRef no_ov = lp_build_cmp(bld, PIPE_FUNC_GREATER, a, b);
46
          a = lp_build_select(bld, no_ov, a, b);
(-)b/graphics/mesa-dri/files/patch-e4803ab (+24 lines)
Added Link Here
1
https://gitlab.freedesktop.org/mesa/mesa/commit/e4803ab7d2b6
2
3
--- src/amd/common/ac_llvm_build.c.orig	2019-01-17 11:26:22 UTC
4
+++ src/amd/common/ac_llvm_build.c
5
@@ -1191,11 +1191,15 @@ ac_build_buffer_load(struct ac_llvm_context *ctx,
6
 				offset = LLVMBuildAdd(ctx->builder, offset,
7
 						      LLVMConstInt(ctx->i32, 4, 0), "");
8
 			}
9
-			LLVMValueRef args[2] = {rsrc, offset};
10
-			result[i] = ac_build_intrinsic(ctx, "llvm.SI.load.const.v4i32",
11
-						       ctx->f32, args, 2,
12
+			const char *intrname =
13
+				HAVE_LLVM >= 0x0800 ? "llvm.amdgcn.s.buffer.load.f32"
14
+						    : "llvm.SI.load.const.v4i32";
15
+			unsigned num_args = HAVE_LLVM >= 0x0800 ? 3 : 2;
16
+			LLVMValueRef args[3] = {rsrc, offset, ctx->i32_0};
17
+			result[i] = ac_build_intrinsic(ctx, intrname,
18
+						       ctx->f32, args, num_args,
19
 						       AC_FUNC_ATTR_READNONE |
20
-						       AC_FUNC_ATTR_LEGACY);
21
+						       (HAVE_LLVM < 0x0800 ? AC_FUNC_ATTR_LEGACY : 0));
22
 		}
23
 		if (num_channels == 1)
24
 			return result[0];

Return to bug 240722