From 34220840266d56c40fc64afdb32876c47726dd27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Mon, 25 Mar 2024 14:47:59 +0100 Subject: [PATCH] aco: Use common helper for counting tess level components. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Timur Kristóf Reviewed-by: Samuel Pitoiset Part-of: --- .../compiler/aco_instruction_selection.cpp | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index ccb3515c394..63ae718f47b 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -13172,22 +13172,8 @@ select_tcs_epilog(Program* program, void* pinfo, ac_shader_config* config, if_context ic_invoc_0; begin_divergent_if_then(&ctx, &ic_invoc_0, cond); - int outer_comps, inner_comps; - switch (einfo->primitive_mode) { - case TESS_PRIMITIVE_ISOLINES: - outer_comps = 2; - inner_comps = 0; - break; - case TESS_PRIMITIVE_TRIANGLES: - outer_comps = 3; - inner_comps = 1; - break; - case TESS_PRIMITIVE_QUADS: - outer_comps = 4; - inner_comps = 2; - break; - default: unreachable("invalid primitive mode"); return; - } + unsigned outer_comps, inner_comps; + mesa_count_tess_level_components(einfo->primitive_mode, &outer_comps, &inner_comps); bld.reset(ctx.block); @@ -13199,10 +13185,10 @@ select_tcs_epilog(Program* program, void* pinfo, ac_shader_config* config, Temp outer[4]; Temp inner[2]; if (einfo->pass_tessfactors_by_reg) { - for (int i = 0; i < outer_comps; i++) + for (unsigned i = 0; i < outer_comps; i++) outer[i] = get_arg(&ctx, einfo->tess_lvl_out[i]); - for (int i = 0; i < inner_comps; i++) + for (unsigned i = 0; i < inner_comps; i++) inner[i] = get_arg(&ctx, einfo->tess_lvl_in[i]); } else { Temp addr = get_arg(&ctx, einfo->tcs_out_current_patch_data_offset); @@ -13210,13 +13196,13 @@ select_tcs_epilog(Program* program, void* pinfo, ac_shader_config* config, Temp data = program->allocateTmp(RegClass(RegType::vgpr, outer_comps)); load_lds(&ctx, 4, outer_comps, data, addr, tess_lvl_out_loc, 4); - for (int i = 0; i < outer_comps; i++) + for (unsigned i = 0; i < outer_comps; i++) outer[i] = emit_extract_vector(&ctx, data, i, v1); if (inner_comps) { data = program->allocateTmp(RegClass(RegType::vgpr, inner_comps)); load_lds(&ctx, 4, inner_comps, data, addr, tess_lvl_in_loc, 4); - for (int i = 0; i < inner_comps; i++) + for (unsigned i = 0; i < inner_comps; i++) inner[i] = emit_extract_vector(&ctx, data, i, v1); } }