radv, aco: Remove the code that jumped to RADV's TCS epilogs.

The actual TCS epilog selection code is kept unchanged for now,
we'll delete it when RadeonSI also gets rid of TCS epilogs.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28408>
This commit is contained in:
Timur Kristóf
2024-03-27 01:41:19 +01:00
committed by Marge Bot
parent e421923692
commit 3fd002f6d5
3 changed files with 2 additions and 87 deletions
+2 -81
View File
@@ -11144,23 +11144,6 @@ get_arg_for_end(isel_context* ctx, struct ac_arg arg)
return Operand(get_arg(ctx, arg), get_arg_reg(ctx->args, arg));
}
static Temp
get_patch_base(isel_context* ctx)
{
Builder bld(ctx->program, ctx->block);
const unsigned output_vertex_size = ctx->program->info.tcs.num_linked_outputs * 16u;
const unsigned pervertex_output_patch_size =
ctx->program->info.tcs.tcs_vertices_out * output_vertex_size;
Temp num_patches =
bld.sop2(aco_opcode::s_bfe_u32, bld.def(s1), bld.def(s1, scc),
get_arg(ctx, ctx->program->info.tcs.tcs_offchip_layout), Operand::c32(0x60006));
return bld.sop2(aco_opcode::s_mul_i32, bld.def(s1), num_patches,
Operand::c32(pervertex_output_patch_size));
}
static void
passthrough_all_args(isel_context* ctx, std::vector<Operand>& regs)
{
@@ -11185,66 +11168,6 @@ build_end_with_regs(isel_context* ctx, std::vector<Operand>& regs)
ctx->block->kind |= block_kind_end_with_regs;
}
static void
create_tcs_jump_to_epilog(isel_context* ctx)
{
Builder bld(ctx->program, ctx->block);
PhysReg vgpr_start(256); /* VGPR 0 */
PhysReg sgpr_start(0); /* SGPR 0 */
/* SGPRs */
Operand ring_offsets = Operand(get_arg(ctx, ctx->args->ring_offsets));
ring_offsets.setFixed(sgpr_start);
Operand tess_offchip_offset = Operand(get_arg(ctx, ctx->args->tess_offchip_offset));
tess_offchip_offset.setFixed(sgpr_start.advance(8u));
Operand tcs_factor_offset = Operand(get_arg(ctx, ctx->args->tcs_factor_offset));
tcs_factor_offset.setFixed(sgpr_start.advance(12u));
Operand tcs_offchip_layout = Operand(get_arg(ctx, ctx->program->info.tcs.tcs_offchip_layout));
tcs_offchip_layout.setFixed(sgpr_start.advance(16u));
Operand patch_base = Operand(get_patch_base(ctx));
patch_base.setFixed(sgpr_start.advance(20u));
/* VGPRs */
Operand invocation_id =
bld.vop3(aco_opcode::v_bfe_u32, bld.def(v1), get_arg(ctx, ctx->args->tcs_rel_ids),
Operand::c32(8u), Operand::c32(5u));
invocation_id.setFixed(vgpr_start);
Operand rel_patch_id =
bld.pseudo(aco_opcode::p_extract, bld.def(v1), get_arg(ctx, ctx->args->tcs_rel_ids),
Operand::c32(0u), Operand::c32(8u), Operand::c32(0u));
rel_patch_id.setFixed(vgpr_start.advance(4u));
Temp continue_pc = convert_pointer_to_64_bit(ctx, get_arg(ctx, ctx->program->info.epilog_pc));
aco_ptr<Instruction> jump{
create_instruction(aco_opcode::p_jump_to_epilog, Format::PSEUDO, 14, 0)};
jump->operands[0] = Operand(continue_pc);
jump->operands[1] = ring_offsets;
jump->operands[2] = tess_offchip_offset;
jump->operands[3] = tcs_factor_offset;
jump->operands[4] = tcs_offchip_layout;
jump->operands[5] = patch_base;
jump->operands[6] = invocation_id;
jump->operands[7] = rel_patch_id;
for (unsigned i = 0; i < 4; ++i) {
Temp t = ctx->outputs.temps[VARYING_SLOT_TESS_LEVEL_OUTER * 4 + i];
jump->operands[8 + i] = t.id() ? Operand(t, vgpr_start.advance(8 + (i * 4))) : Operand();
}
for (unsigned i = 0; i < 2; ++i) {
Temp t = ctx->outputs.temps[VARYING_SLOT_TESS_LEVEL_INNER * 4 + i];
jump->operands[12 + i] = t.id() ? Operand(t, vgpr_start.advance(24 + (i * 4))) : Operand();
}
ctx->block->instructions.emplace_back(std::move(jump));
}
static void
create_tcs_end_for_epilog(isel_context* ctx)
{
@@ -11919,10 +11842,8 @@ select_shader(isel_context& ctx, nir_shader* nir, const bool need_startpgm, cons
ctx.program->has_color_exports = true;
} else if (nir->info.stage == MESA_SHADER_TESS_CTRL) {
assert(ctx.stage == tess_control_hs || ctx.stage == vertex_tess_control_hs);
if (ctx.options->is_opengl)
create_tcs_end_for_epilog(&ctx);
else
create_tcs_jump_to_epilog(&ctx);
assert(ctx.options->is_opengl);
create_tcs_end_for_epilog(&ctx);
}
}
-3
View File
@@ -148,9 +148,6 @@ struct aco_shader_info {
/* Vulkan only */
uint32_t num_lds_blocks;
uint32_t num_linked_outputs;
uint32_t num_linked_patch_outputs;
uint32_t tcs_vertices_out;
/* OpenGL only */
bool pass_tessfactors_by_reg;
-3
View File
@@ -54,9 +54,6 @@ radv_aco_convert_shader_info(struct aco_shader_info *aco_info, const struct radv
ASSIGN_FIELD(vs.tcs_temp_only_input_mask);
ASSIGN_FIELD(vs.has_prolog);
ASSIGN_FIELD(tcs.num_lds_blocks);
ASSIGN_FIELD(tcs.num_linked_outputs);
ASSIGN_FIELD(tcs.num_linked_patch_outputs);
ASSIGN_FIELD(tcs.tcs_vertices_out);
ASSIGN_FIELD(ps.num_interp);
ASSIGN_FIELD(cs.uses_full_subgroups);
aco_info->ps.spi_ps_input_ena = radv->ps.spi_ps_input;