mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
Mesa: add upstream patches to enable geometry shaders with LLVM-3.4.1 on radeonsi
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
90d18faa6f
commit
99bc201110
@ -0,0 +1,26 @@
|
|||||||
|
diff -Naur Mesa-10.1.3/configure.ac Mesa-10.1.3.patch/configure.ac
|
||||||
|
--- Mesa-10.1.3/configure.ac 2014-05-09 16:15:36.000000000 +0200
|
||||||
|
+++ Mesa-10.1.3.patch/configure.ac 2014-05-12 11:20:15.124212119 +0200
|
||||||
|
@@ -1602,6 +1602,13 @@
|
||||||
|
|
||||||
|
AC_COMPUTE_INT([LLVM_VERSION_MAJOR], [LLVM_VERSION_MAJOR],
|
||||||
|
[#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
|
||||||
|
+
|
||||||
|
+ dnl In LLVM 3.4.1 patch level was defined in config.h and not
|
||||||
|
+ dnl llvm-config.h
|
||||||
|
+ AC_COMPUTE_INT([LLVM_VERSION_PATCH], [LLVM_VERSION_PATCH],
|
||||||
|
+ [#include "${LLVM_INCLUDEDIR}/llvm/Config/config.h"],
|
||||||
|
+ LLVM_VERSION_PATCH=0) dnl Default if LLVM_VERSION_PATCH not found
|
||||||
|
+
|
||||||
|
AC_COMPUTE_INT([LLVM_VERSION_MINOR], [LLVM_VERSION_MINOR],
|
||||||
|
[#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
|
||||||
|
|
||||||
|
@@ -1627,7 +1634,7 @@
|
||||||
|
LLVM_COMPONENTS="${LLVM_COMPONENTS} option"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
- DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT"
|
||||||
|
+ DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DLLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
|
||||||
|
MESA_LLVM=1
|
||||||
|
|
||||||
|
dnl Check for Clang internal headers
|
@ -0,0 +1,119 @@
|
|||||||
|
From 93c2ebbd83604263fa46351a7efcde382322024b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tom Stellard <thomas.stellard@amd.com>
|
||||||
|
Date: Fri, 09 May 2014 08:24:42 +0000
|
||||||
|
Subject: radeonsi: Enable geometry shaders with LLVM 3.4.1
|
||||||
|
|
||||||
|
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
|
||||||
|
|
||||||
|
CC: "10.1 10.2" <mesa-stable@lists.freedesktop.org>
|
||||||
|
---
|
||||||
|
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
|
||||||
|
index e0b211f..38ad077 100644
|
||||||
|
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
|
||||||
|
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
|
||||||
|
@@ -152,7 +152,7 @@ static void si_update_descriptors(struct si_context *sctx,
|
||||||
|
7 + /* copy */
|
||||||
|
(4 + desc->element_dw_size) * util_bitcount(desc->dirty_mask) + /* update */
|
||||||
|
4; /* pointer update */
|
||||||
|
-#if HAVE_LLVM >= 0x0305
|
||||||
|
+#if LLVM_SUPPORTS_GEOM_SHADERS
|
||||||
|
if (desc->shader_userdata_reg >= R_00B130_SPI_SHADER_USER_DATA_VS_0 &&
|
||||||
|
desc->shader_userdata_reg < R_00B230_SPI_SHADER_USER_DATA_GS_0)
|
||||||
|
desc->atom.num_dw += 4; /* second pointer update */
|
||||||
|
@@ -177,7 +177,7 @@ static void si_emit_shader_pointer(struct si_context *sctx,
|
||||||
|
radeon_emit(cs, va);
|
||||||
|
radeon_emit(cs, va >> 32);
|
||||||
|
|
||||||
|
-#if HAVE_LLVM >= 0x0305
|
||||||
|
+#if LLVM_SUPPORTS_GEOM_SHADERS
|
||||||
|
if (desc->shader_userdata_reg >= R_00B130_SPI_SHADER_USER_DATA_VS_0 &&
|
||||||
|
desc->shader_userdata_reg < R_00B230_SPI_SHADER_USER_DATA_GS_0) {
|
||||||
|
radeon_emit(cs, PKT3(PKT3_SET_SH_REG, 2, 0));
|
||||||
|
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
|
||||||
|
index e5d0a95..07c00cf 100644
|
||||||
|
--- a/src/gallium/drivers/radeonsi/si_pipe.c
|
||||||
|
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
|
||||||
|
@@ -225,7 +225,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
||||||
|
- return HAVE_LLVM >= 0x0305 ? 330 : 140;
|
||||||
|
+ return (LLVM_SUPPORTS_GEOM_SHADERS) ? 330 : 140;
|
||||||
|
|
||||||
|
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
|
||||||
|
return MIN2(sscreen->b.info.vram_size, 0xFFFFFFFF);
|
||||||
|
@@ -309,7 +309,7 @@ static int si_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enu
|
||||||
|
case PIPE_SHADER_VERTEX:
|
||||||
|
break;
|
||||||
|
case PIPE_SHADER_GEOMETRY:
|
||||||
|
-#if HAVE_LLVM < 0x0305
|
||||||
|
+#if !(LLVM_SUPPORTS_GEOM_SHADERS)
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
|
||||||
|
index 1601a4b..de42477 100644
|
||||||
|
--- a/src/gallium/drivers/radeonsi/si_pipe.h
|
||||||
|
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
|
||||||
|
@@ -39,6 +39,10 @@
|
||||||
|
|
||||||
|
#define SI_MAX_DRAW_CS_DWORDS 18
|
||||||
|
|
||||||
|
+#define LLVM_SUPPORTS_GEOM_SHADERS \
|
||||||
|
+ ((HAVE_LLVM >= 0x0305) || \
|
||||||
|
+ (HAVE_LLVM == 0x0304 && LLVM_VERSION_PATCH >= 1))
|
||||||
|
+
|
||||||
|
struct si_pipe_compute;
|
||||||
|
|
||||||
|
struct si_screen {
|
||||||
|
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
|
||||||
|
index 9d048c5..a98be24 100644
|
||||||
|
--- a/src/gallium/drivers/radeonsi/si_state.c
|
||||||
|
+++ b/src/gallium/drivers/radeonsi/si_state.c
|
||||||
|
@@ -2174,7 +2174,7 @@ static void *si_create_fs_state(struct pipe_context *ctx,
|
||||||
|
return si_create_shader_state(ctx, state, PIPE_SHADER_FRAGMENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if HAVE_LLVM >= 0x0305
|
||||||
|
+#if LLVM_SUPPORTS_GEOM_SHADERS
|
||||||
|
|
||||||
|
static void *si_create_gs_state(struct pipe_context *ctx,
|
||||||
|
const struct pipe_shader_state *state)
|
||||||
|
@@ -2204,7 +2204,7 @@ static void si_bind_vs_shader(struct pipe_context *ctx, void *state)
|
||||||
|
sctx->vs_shader = sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if HAVE_LLVM >= 0x0305
|
||||||
|
+#if LLVM_SUPPORTS_GEOM_SHADERS
|
||||||
|
|
||||||
|
static void si_bind_gs_shader(struct pipe_context *ctx, void *state)
|
||||||
|
{
|
||||||
|
@@ -2272,7 +2272,7 @@ static void si_delete_vs_shader(struct pipe_context *ctx, void *state)
|
||||||
|
si_delete_shader_selector(ctx, sel);
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if HAVE_LLVM >= 0x0305
|
||||||
|
+#if LLVM_SUPPORTS_GEOM_SHADERS
|
||||||
|
|
||||||
|
static void si_delete_gs_shader(struct pipe_context *ctx, void *state)
|
||||||
|
{
|
||||||
|
@@ -2769,7 +2769,7 @@ static void si_bind_vs_sampler_states(struct pipe_context *ctx, unsigned count,
|
||||||
|
si_set_sampler_states(sctx, pm4, count, states,
|
||||||
|
&sctx->samplers[PIPE_SHADER_VERTEX],
|
||||||
|
R_00B130_SPI_SHADER_USER_DATA_VS_0);
|
||||||
|
-#if HAVE_LLVM >= 0x0305
|
||||||
|
+#if LLVM_SUPPORTS_GEOM_SHADERS
|
||||||
|
si_set_sampler_states(sctx, pm4, count, states,
|
||||||
|
&sctx->samplers[PIPE_SHADER_VERTEX],
|
||||||
|
R_00B330_SPI_SHADER_USER_DATA_ES_0);
|
||||||
|
@@ -3001,7 +3001,7 @@ void si_init_state_functions(struct si_context *sctx)
|
||||||
|
sctx->b.b.bind_fs_state = si_bind_ps_shader;
|
||||||
|
sctx->b.b.delete_vs_state = si_delete_vs_shader;
|
||||||
|
sctx->b.b.delete_fs_state = si_delete_ps_shader;
|
||||||
|
-#if HAVE_LLVM >= 0x0305
|
||||||
|
+#if LLVM_SUPPORTS_GEOM_SHADERS
|
||||||
|
sctx->b.b.create_gs_state = si_create_gs_state;
|
||||||
|
sctx->b.b.bind_gs_state = si_bind_gs_shader;
|
||||||
|
sctx->b.b.delete_gs_state = si_delete_gs_shader;
|
||||||
|
--
|
||||||
|
cgit v0.9.0.2-2-gbebe
|
Loading…
x
Reference in New Issue
Block a user