From: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/amd/common/ac_nir_to_llvm.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 0457d43..156b685 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -489,42 +489,42 @@ static int get_elem_bits(struct ac_llvm_context *ctx, LLVMTypeRef type) if (type == ctx->f16) return 16; if (type == ctx->f32) return 32; if (type == ctx->f64) return 64; unreachable("Unhandled type kind in get_elem_bits"); } -static LLVMValueRef unpack_param(struct nir_to_llvm_context *ctx, +static LLVMValueRef unpack_param(struct ac_llvm_context *ctx, LLVMValueRef param, unsigned rshift, unsigned bitwidth) { LLVMValueRef value = param; if (rshift) value = LLVMBuildLShr(ctx->builder, value, LLVMConstInt(ctx->i32, rshift, false), ""); if (rshift + bitwidth < 32) { unsigned mask = (1 << bitwidth) - 1; value = LLVMBuildAnd(ctx->builder, value, LLVMConstInt(ctx->i32, mask, false), ""); } return value; } static LLVMValueRef get_rel_patch_id(struct nir_to_llvm_context *ctx) { switch (ctx->stage) { case MESA_SHADER_TESS_CTRL: - return unpack_param(ctx, ctx->tcs_rel_ids, 0, 8); + return unpack_param(&ctx->ac, ctx->tcs_rel_ids, 0, 8); case MESA_SHADER_TESS_EVAL: return ctx->tes_rel_patch_id; break; default: unreachable("Illegal stage"); } } /* Tessellation shaders pass outputs to the next shader using LDS. * @@ -543,48 +543,48 @@ static LLVMValueRef get_rel_patch_id(struct nir_to_llvm_context *ctx) * - TCS outputs for patch 2 = get_tcs_out_current_patch_offset (if RelPatchID==2) * - Per-patch TCS outputs for patch 2 = get_tcs_out_current_patch_data_offset (if RelPatchID==2) * - ... * * All three shaders VS(LS), TCS, TES share the same LDS space. */ static LLVMValueRef get_tcs_in_patch_stride(struct nir_to_llvm_context *ctx) { if (ctx->stage == MESA_SHADER_VERTEX) - return unpack_param(ctx, ctx->ls_out_layout, 0, 13); + return unpack_param(&ctx->ac, ctx->ls_out_layout, 0, 13); else if (ctx->stage == MESA_SHADER_TESS_CTRL) - return unpack_param(ctx, ctx->tcs_in_layout, 0, 13); + return unpack_param(&ctx->ac, ctx->tcs_in_layout, 0, 13); else { assert(0); return NULL; } } static LLVMValueRef get_tcs_out_patch_stride(struct nir_to_llvm_context *ctx) { - return unpack_param(ctx, ctx->tcs_out_layout, 0, 13); + return unpack_param(&ctx->ac, ctx->tcs_out_layout, 0, 13); } static LLVMValueRef get_tcs_out_patch0_offset(struct nir_to_llvm_context *ctx) { return LLVMBuildMul(ctx->builder, - unpack_param(ctx, ctx->tcs_out_offsets, 0, 16), + unpack_param(&ctx->ac, ctx->tcs_out_offsets, 0, 16), LLVMConstInt(ctx->i32, 4, false), ""); } static LLVMValueRef get_tcs_out_patch0_patch_data_offset(struct nir_to_llvm_context *ctx) { return LLVMBuildMul(ctx->builder, - unpack_param(ctx, ctx->tcs_out_offsets, 16, 16), + unpack_param(&ctx->ac, ctx->tcs_out_offsets, 16, 16), LLVMConstInt(ctx->i32, 4, false), ""); } static LLVMValueRef get_tcs_in_current_patch_offset(struct nir_to_llvm_context *ctx) { LLVMValueRef patch_stride = get_tcs_in_patch_stride(ctx); LLVMValueRef rel_patch_id = get_rel_patch_id(ctx); return LLVMBuildMul(ctx->builder, patch_stride, rel_patch_id, ""); @@ -2567,22 +2567,22 @@ lds_store(struct nir_to_llvm_context *ctx, * Note that every attribute has 4 components. */ static LLVMValueRef get_tcs_tes_buffer_address(struct nir_to_llvm_context *ctx, LLVMValueRef vertex_index, LLVMValueRef param_index) { LLVMValueRef base_addr, vertices_per_patch, num_patches, total_vertices; LLVMValueRef param_stride, constant16; LLVMValueRef rel_patch_id = get_rel_patch_id(ctx); - vertices_per_patch = unpack_param(ctx, ctx->tcs_offchip_layout, 9, 6); - num_patches = unpack_param(ctx, ctx->tcs_offchip_layout, 0, 9); + vertices_per_patch = unpack_param(&ctx->ac, ctx->tcs_offchip_layout, 9, 6); + num_patches = unpack_param(&ctx->ac, ctx->tcs_offchip_layout, 0, 9); total_vertices = LLVMBuildMul(ctx->builder, vertices_per_patch, num_patches, ""); constant16 = LLVMConstInt(ctx->i32, 16, false); if (vertex_index) { base_addr = LLVMBuildMul(ctx->builder, rel_patch_id, vertices_per_patch, ""); base_addr = LLVMBuildAdd(ctx->builder, base_addr, vertex_index, ""); @@ -2594,21 +2594,21 @@ static LLVMValueRef get_tcs_tes_buffer_address(struct nir_to_llvm_context *ctx, } base_addr = LLVMBuildAdd(ctx->builder, base_addr, LLVMBuildMul(ctx->builder, param_index, param_stride, ""), ""); base_addr = LLVMBuildMul(ctx->builder, base_addr, constant16, ""); if (!vertex_index) { LLVMValueRef patch_data_offset = - unpack_param(ctx, ctx->tcs_offchip_layout, 16, 16); + unpack_param(&ctx->ac, ctx->tcs_offchip_layout, 16, 16); base_addr = LLVMBuildAdd(ctx->builder, base_addr, patch_data_offset, ""); } return base_addr; } static LLVMValueRef get_tcs_tes_buffer_address_params(struct nir_to_llvm_context *ctx, unsigned param, unsigned const_index, @@ -2686,21 +2686,21 @@ load_tcs_input(struct nir_to_llvm_context *ctx, LLVMValueRef indir_index; unsigned param; LLVMValueRef value[4], result; const bool per_vertex = nir_is_per_vertex_io(instr->variables[0]->var, ctx->stage); const bool is_compact = instr->variables[0]->var->data.compact; param = shader_io_get_unique_index(instr->variables[0]->var->data.location); get_deref_offset(ctx->nir, instr->variables[0], false, NULL, per_vertex ? &vertex_index : NULL, &const_index, &indir_index); - stride = unpack_param(ctx, ctx->tcs_in_layout, 13, 8); + stride = unpack_param(&ctx->ac, ctx->tcs_in_layout, 13, 8); dw_addr = get_tcs_in_current_patch_offset(ctx); dw_addr = get_dw_address(ctx, dw_addr, param, const_index, is_compact, vertex_index, stride, indir_index); for (unsigned i = 0; i < instr->num_components; i++) { value[i] = lds_load(ctx, dw_addr); dw_addr = LLVMBuildAdd(ctx->builder, dw_addr, ctx->i32one, ""); } result = ac_build_gather_values(&ctx->ac, value, instr->num_components); @@ -2719,21 +2719,21 @@ load_tcs_output(struct nir_to_llvm_context *ctx, unsigned const_index = 0; unsigned param; const bool per_vertex = nir_is_per_vertex_io(instr->variables[0]->var, ctx->stage); const bool is_compact = instr->variables[0]->var->data.compact; param = shader_io_get_unique_index(instr->variables[0]->var->data.location); get_deref_offset(ctx->nir, instr->variables[0], false, NULL, per_vertex ? &vertex_index : NULL, &const_index, &indir_index); if (!instr->variables[0]->var->data.patch) { - stride = unpack_param(ctx, ctx->tcs_out_layout, 13, 8); + stride = unpack_param(&ctx->ac, ctx->tcs_out_layout, 13, 8); dw_addr = get_tcs_out_current_patch_offset(ctx); } else { dw_addr = get_tcs_out_current_patch_data_offset(ctx); } dw_addr = get_dw_address(ctx, dw_addr, param, const_index, is_compact, vertex_index, stride, indir_index); for (unsigned i = 0; i < instr->num_components; i++) { value[i] = lds_load(ctx, dw_addr); @@ -2765,21 +2765,21 @@ store_tcs_output(struct nir_to_llvm_context *ctx, &const_index, &indir_index); param = shader_io_get_unique_index(instr->variables[0]->var->data.location); if (instr->variables[0]->var->data.location == VARYING_SLOT_CLIP_DIST0 && is_compact && const_index > 3) { const_index -= 3; param++; } if (!instr->variables[0]->var->data.patch) { - stride = unpack_param(ctx, ctx->tcs_out_layout, 13, 8); + stride = unpack_param(&ctx->ac, ctx->tcs_out_layout, 13, 8); dw_addr = get_tcs_out_current_patch_offset(ctx); } else { dw_addr = get_tcs_out_current_patch_data_offset(ctx); } mark_tess_output(ctx, instr->variables[0]->var->data.patch, param); dw_addr = get_dw_address(ctx, dw_addr, param, const_index, is_compact, vertex_index, stride, indir_index); buf_addr = get_tcs_tes_buffer_address_params(ctx, param, const_index, is_compact, @@ -3911,36 +3911,36 @@ static void visit_intrinsic(struct ac_nir_context *ctx, break; } case nir_intrinsic_load_base_instance: result = LLVMGetParam(ctx->main_function, ctx->abi->param_start_instance); break; case nir_intrinsic_load_draw_id: result = LLVMGetParam(ctx->main_function, ctx->abi->param_draw_id); break; case nir_intrinsic_load_invocation_id: if (ctx->stage == MESA_SHADER_TESS_CTRL) - result = unpack_param(ctx->nctx, ctx->nctx->tcs_rel_ids, 8, 5); + result = unpack_param(&ctx->ac, ctx->nctx->tcs_rel_ids, 8, 5); else result = ctx->nctx->gs_invocation_id; break; case nir_intrinsic_load_primitive_id: if (ctx->stage == MESA_SHADER_GEOMETRY) result = ctx->nctx->gs_prim_id; else if (ctx->stage == MESA_SHADER_TESS_CTRL) result = ctx->nctx->tcs_patch_id; else if (ctx->stage == MESA_SHADER_TESS_EVAL) result = ctx->nctx->tes_patch_id; else fprintf(stderr, "Unknown primitive id intrinsic: %d", ctx->stage); break; case nir_intrinsic_load_sample_id: - result = unpack_param(ctx->nctx, + result = unpack_param(&ctx->ac, LLVMGetParam(ctx->main_function, ctx->abi->param_ancillary), 8, 4); break; case nir_intrinsic_load_sample_pos: result = load_sample_pos(ctx); break; case nir_intrinsic_load_sample_mask_in: result = LLVMGetParam(ctx->main_function, ctx->abi->param_sample_coverage); break; case nir_intrinsic_load_front_face: @@ -5452,21 +5452,21 @@ handle_es_outputs_post(struct nir_to_llvm_context *ctx, 1, 1, true, true); } } outinfo->esgs_itemsize = (max_output_written + 1) * 16; } static void handle_ls_outputs_post(struct nir_to_llvm_context *ctx) { LLVMValueRef vertex_id = ctx->rel_auto_id; - LLVMValueRef vertex_dw_stride = unpack_param(ctx, ctx->ls_out_layout, 13, 8); + LLVMValueRef vertex_dw_stride = unpack_param(&ctx->ac, ctx->ls_out_layout, 13, 8); LLVMValueRef base_dw_addr = LLVMBuildMul(ctx->builder, vertex_id, vertex_dw_stride, ""); for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) { LLVMValueRef *out_ptr = &ctx->nir->outputs[i * 4]; int length = 4; if (!(ctx->output_mask & (1ull << i))) continue; @@ -5576,22 +5576,22 @@ ac_nir_build_endif(struct ac_build_if_state *ifthen) /* Resume building code at end of the ifthen->merge_block */ LLVMPositionBuilderAtEnd(builder, ifthen->merge_block); } static void write_tess_factors(struct nir_to_llvm_context *ctx) { unsigned stride, outer_comps, inner_comps; struct ac_build_if_state if_ctx, inner_if_ctx; - LLVMValueRef invocation_id = unpack_param(ctx, ctx->tcs_rel_ids, 8, 5); - LLVMValueRef rel_patch_id = unpack_param(ctx, ctx->tcs_rel_ids, 0, 8); + LLVMValueRef invocation_id = unpack_param(&ctx->ac, ctx->tcs_rel_ids, 8, 5); + LLVMValueRef rel_patch_id = unpack_param(&ctx->ac, ctx->tcs_rel_ids, 0, 8); unsigned tess_inner_index, tess_outer_index; LLVMValueRef lds_base, lds_inner, lds_outer, byteoffset, buffer; LLVMValueRef out[6], vec0, vec1, tf_base, inner[4], outer[4]; int i; emit_barrier(ctx); switch (ctx->options->key.tcs.primitive_mode) { case GL_ISOLINES: stride = 2; outer_comps = 2; -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev