[Mesa-dev] [PATCH] radeonsi: Don't use global variables for tess lds

Tom Stellard thomas.stellard at amd.com
Fri Aug 26 19:52:12 UTC 2016


We were allocating global variables for the maximum LDS size
which made the compiler think we were using all of LDS, which
isn't the case.
---
 src/gallium/drivers/radeonsi/si_shader.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 64c367e..5d972cb 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -5420,16 +5420,13 @@ static unsigned llvm_get_type_size(LLVMTypeRef type)
 static void declare_tess_lds(struct si_shader_context *ctx)
 {
 	struct gallivm_state *gallivm = &ctx->radeon_bld.gallivm;
-	LLVMTypeRef i32 = ctx->radeon_bld.soa.bld_base.uint_bld.elem_type;
-	unsigned lds_size = ctx->screen->b.chip_class >= CIK ? 65536 : 32768;
+	struct lp_build_tgsi_context *bld_base = &ctx->radeon_bld.soa.bld_base;
+	struct lp_build_context *uint = &bld_base->uint_bld;
 
-	/* The actual size is computed outside of the shader to reduce
-	 * the number of shader variants. */
-	ctx->lds =
-		LLVMAddGlobalInAddressSpace(gallivm->module,
-					    LLVMArrayType(i32, lds_size / 4),
-					    "tess_lds",
-					    LOCAL_ADDR_SPACE);
+	unsigned lds_size = ctx->screen->b.chip_class >= CIK ? 65536 : 32768;
+	ctx->lds = LLVMBuildIntToPtr(gallivm->builder, uint->zero,
+		LLVMPointerType(LLVMArrayType(ctx->i32, lds_size / 4), LOCAL_ADDR_SPACE),
+		"tess_lds");
 }
 
 static void create_function(struct si_shader_context *ctx)
-- 
2.7.4



More information about the mesa-dev mailing list