From: Marek Olšák <marek.ol...@amd.com> --- src/gallium/drivers/radeonsi/si_shader.c | 13 +++++-------- src/gallium/drivers/radeonsi/si_shader_internal.h | 13 ++++++------- src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c | 4 ++-- 3 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index db8297d..861d82f 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1486,23 +1486,23 @@ static LLVMValueRef load_sample_position(struct si_shader_context *ctx, LLVMValu LLVMValueRef pos[4] = { buffer_load_const(ctx, resource, offset0), buffer_load_const(ctx, resource, offset1), LLVMConstReal(ctx->f32, 0), LLVMConstReal(ctx->f32, 0) }; return lp_build_gather_values(gallivm, pos, 4); } -static void declare_system_value(struct si_shader_context *ctx, - unsigned index, - const struct tgsi_full_declaration *decl) +void si_load_system_value(struct si_shader_context *ctx, + unsigned index, + const struct tgsi_full_declaration *decl) { struct lp_build_context *bld = &ctx->bld_base.base; struct gallivm_state *gallivm = &ctx->gallivm; LLVMValueRef value = 0; assert(index < RADEON_LLVM_MAX_SYSTEM_VALUES); switch (decl->Semantic.Name) { case TGSI_SEMANTIC_INSTANCEID: value = ctx->abi.instance_id; @@ -1763,22 +1763,22 @@ static void declare_system_value(struct si_shader_context *ctx, } default: assert(!"unknown system value"); return; } ctx->system_values[index] = value; } -static void declare_compute_memory(struct si_shader_context *ctx, - const struct tgsi_full_declaration *decl) +void si_declare_compute_memory(struct si_shader_context *ctx, + const struct tgsi_full_declaration *decl) { struct si_shader_selector *sel = ctx->shader->selector; struct gallivm_state *gallivm = &ctx->gallivm; LLVMTypeRef i8p = LLVMPointerType(ctx->i8, LOCAL_ADDR_SPACE); LLVMValueRef var; assert(decl->Declaration.MemType == TGSI_MEMORY_TYPE_SHARED); assert(decl->Range.First == decl->Range.Last); assert(!ctx->shared_memory); @@ -5684,21 +5684,20 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx, case PIPE_SHADER_GEOMETRY: bld_base->emit_fetch_funcs[TGSI_FILE_INPUT] = fetch_input_gs; bld_base->emit_epilogue = si_llvm_emit_gs_epilogue; break; case PIPE_SHADER_FRAGMENT: ctx->load_input = declare_input_fs; ctx->abi.emit_outputs = si_llvm_return_fs_outputs; bld_base->emit_epilogue = si_tgsi_emit_epilogue; break; case PIPE_SHADER_COMPUTE: - ctx->declare_memory_region = declare_compute_memory; break; default: assert(!"Unsupported shader type"); return false; } ctx->abi.load_ubo = load_ubo; ctx->abi.load_ssbo = load_ssbo; create_function(ctx); @@ -6338,22 +6337,20 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, si_init_shader_ctx(&ctx, sscreen, tm); si_llvm_context_set_tgsi(&ctx, shader); ctx.separate_prolog = !is_monolithic; memset(shader->info.vs_output_param_offset, AC_EXP_PARAM_UNDEFINED, sizeof(shader->info.vs_output_param_offset)); shader->info.uses_instanceid = sel->info.uses_instanceid; - ctx.load_system_value = declare_system_value; - if (!si_compile_tgsi_main(&ctx, is_monolithic)) { si_llvm_dispose(&ctx); return -1; } if (is_monolithic && ctx.type == PIPE_SHADER_VERTEX) { LLVMValueRef parts[2]; bool need_prolog = sel->vs_needs_prolog; parts[1] = ctx.main_fn; diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index f304295..1231ef4 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -71,27 +71,20 @@ struct si_shader_context { struct ac_shader_abi abi; /** This function is responsible for initilizing the inputs array and will be * called once for each input declared in the TGSI shader. */ void (*load_input)(struct si_shader_context *, unsigned input_index, const struct tgsi_full_declaration *decl, LLVMValueRef out[4]); - void (*load_system_value)(struct si_shader_context *, - unsigned index, - const struct tgsi_full_declaration *decl); - - void (*declare_memory_region)(struct si_shader_context *, - const struct tgsi_full_declaration *decl); - /** This array contains the input values for the shader. Typically these * values will be in the form of a target intrinsic that will inform the * backend how to load the actual inputs to the shader. */ struct tgsi_full_declaration input_decls[RADEON_LLVM_MAX_INPUT_SLOTS]; LLVMValueRef inputs[RADEON_LLVM_MAX_INPUTS]; LLVMValueRef outputs[RADEON_LLVM_MAX_OUTPUTS][TGSI_NUM_CHANNELS]; LLVMValueRef addrs[RADEON_LLVM_MAX_ADDRS][TGSI_NUM_CHANNELS]; /** This pointer is used to contain the temporary values. @@ -318,20 +311,26 @@ LLVMTypeRef si_const_array(LLVMTypeRef elem_type, int num_elements); void si_shader_context_init_alu(struct lp_build_tgsi_context *bld_base); void si_shader_context_init_mem(struct si_shader_context *ctx); LLVMValueRef si_load_sampler_desc(struct si_shader_context *ctx, LLVMValueRef list, LLVMValueRef index, enum ac_descriptor_type type); LLVMValueRef si_load_image_desc(struct si_shader_context *ctx, LLVMValueRef list, LLVMValueRef index, enum ac_descriptor_type desc_type, bool dcc_off); +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_llvm_load_input_vs( struct si_shader_context *ctx, unsigned input_index, LLVMValueRef out[4]); void si_llvm_load_input_fs( struct si_shader_context *ctx, unsigned input_index, LLVMValueRef out[4]); bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir); diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c index 7a59c90..231f16f 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c @@ -835,21 +835,21 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base, &ctx->inputs[idx * 4]); } } } break; case TGSI_FILE_SYSTEM_VALUE: { unsigned idx; for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) { - ctx->load_system_value(ctx, idx, decl); + si_load_system_value(ctx, idx, decl); } } break; case TGSI_FILE_OUTPUT: { char name[16] = ""; unsigned idx; for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) { unsigned chan; @@ -863,21 +863,21 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base, #endif ctx->outputs[idx][chan] = lp_build_alloca_undef( &ctx->gallivm, ctx->f32, name); } } break; } case TGSI_FILE_MEMORY: - ctx->declare_memory_region(ctx, decl); + si_declare_compute_memory(ctx, decl); break; default: break; } } void si_llvm_emit_store(struct lp_build_tgsi_context *bld_base, const struct tgsi_full_instruction *inst, const struct tgsi_opcode_info *info, -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev