From b6cf898ec24ff19ad6ea03c5327cc7ccfc3a08f5 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Mon, 5 Feb 2018 15:47:05 +1100 Subject: [PATCH] radeonsi: make si_declare_compute_memory() more generic and call for nir MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_shader.c | 14 ++++++++++---- src/gallium/drivers/radeonsi/si_shader_internal.h | 5 +++-- src/gallium/drivers/radeonsi/si_shader_nir.c | 4 ++++ .../drivers/radeonsi/si_shader_tgsi_setup.c | 2 +- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 9340360376d..825cb9dd0ea 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2231,16 +2231,13 @@ void si_load_system_value(struct si_shader_context *ctx, ctx->system_values[index] = value; } -void si_declare_compute_memory(struct si_shader_context *ctx, - const struct tgsi_full_declaration *decl) +void si_declare_compute_memory(struct si_shader_context *ctx) { struct si_shader_selector *sel = ctx->shader->selector; LLVMTypeRef i8p = LLVMPointerType(ctx->i8, AC_LOCAL_ADDR_SPACE); LLVMValueRef var; - assert(decl->Declaration.MemType == TGSI_MEMORY_TYPE_SHARED); - assert(decl->Range.First == decl->Range.Last); assert(!ctx->ac.lds); var = LLVMAddGlobalInAddressSpace(ctx->ac.module, @@ -2252,6 +2249,15 @@ void si_declare_compute_memory(struct si_shader_context *ctx, ctx->ac.lds = LLVMBuildBitCast(ctx->ac.builder, var, i8p, ""); } +void si_tgsi_declare_compute_memory(struct si_shader_context *ctx, + const struct tgsi_full_declaration *decl) +{ + assert(decl->Declaration.MemType == TGSI_MEMORY_TYPE_SHARED); + assert(decl->Range.First == decl->Range.Last); + + si_declare_compute_memory(ctx); +} + static LLVMValueRef load_const_buffer_desc(struct si_shader_context *ctx, int i) { LLVMValueRef list_ptr = LLVMGetParam(ctx->main_fn, diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index 02d5fc8e379..571df559770 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -320,8 +320,9 @@ LLVMValueRef si_load_image_desc(struct si_shader_context *ctx, void si_load_system_value(struct si_shader_context *ctx, unsigned index, const struct tgsi_full_declaration *decl); -void si_declare_compute_memory(struct si_shader_context *ctx, - const struct tgsi_full_declaration *decl); +void si_declare_compute_memory(struct si_shader_context *ctx); +void si_tgsi_declare_compute_memory(struct si_shader_context *ctx, + const struct tgsi_full_declaration *decl); void si_llvm_load_input_vs( struct si_shader_context *ctx, diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index f467ce282af..f46e5c6aac4 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -857,6 +857,10 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir) ctx->num_samplers = util_last_bit(info->samplers_declared); ctx->num_images = util_last_bit(info->images_declared); + if (ctx->shader->selector->local_size) { + assert(nir->info.stage == MESA_SHADER_COMPUTE); + si_declare_compute_memory(ctx); + } ac_nir_translate(&ctx->ac, &ctx->abi, nir, NULL); return true; diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c index 44294f28d16..8707be504e5 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c @@ -851,7 +851,7 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base, } case TGSI_FILE_MEMORY: - si_declare_compute_memory(ctx, decl); + si_tgsi_declare_compute_memory(ctx, decl); break; default: -- 2.30.2