From 93c2ebbd83604263fa46351a7efcde382322024b Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Fri, 9 May 2014 04:24:42 -0400 Subject: [PATCH] radeonsi: Enable geometry shaders with LLVM 3.4.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Michel Dänzer CC: "10.1 10.2" --- src/gallium/drivers/radeonsi/si_descriptors.c | 4 ++-- src/gallium/drivers/radeonsi/si_pipe.c | 4 ++-- src/gallium/drivers/radeonsi/si_pipe.h | 4 ++++ src/gallium/drivers/radeonsi/si_state.c | 10 +++++----- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index e0b211f264c..38ad0778cf0 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 e5d0a95e18e..07c00cf33d0 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 1601a4b58cb..de424778a8d 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 9d048c53e72..a98be24897b 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; -- 2.30.2