--- 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 ++++ src/gallium/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 f7413a2d6f..172da6c1a3 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2228,16 +2228,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, @@ -2249,6 +2246,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 02d5fc8e37..571df55977 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 002561d89e..ed16345b89 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -827,6 +827,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 44294f28d1..8707be504e 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.14.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev