From 0445802ab2e5d101f0bec178c0a322b173a9ef9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Mon, 14 Feb 2022 10:44:28 +0100 Subject: [PATCH] compiler: Extract num_mesh_vertices_per_primitive function. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevent code duplication. Signed-off-by: Timur Kristóf Reviewed-by: Marcin Ślusarz Part-of: --- src/amd/common/ac_nir_lower_ngg.c | 7 ++----- src/compiler/shader_enums.c | 15 +++++++++++++++ src/compiler/shader_enums.h | 5 +++++ src/intel/compiler/brw_mesh.cpp | 16 ++-------------- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c index 5b805f072f4..34f8c115d2c 100644 --- a/src/amd/common/ac_nir_lower_ngg.c +++ b/src/amd/common/ac_nir_lower_ngg.c @@ -2412,11 +2412,8 @@ ac_nir_lower_ngg_ms(nir_shader *shader, nir_function_impl *impl = nir_shader_get_entrypoint(shader); assert(impl); - unsigned vertices_per_prim = 3; - if (shader->info.mesh.primitive_type == SHADER_PRIM_POINTS) - vertices_per_prim = 1; - else if (shader->info.mesh.primitive_type == SHADER_PRIM_LINES) - vertices_per_prim = 2; + unsigned vertices_per_prim = + num_mesh_vertices_per_primitive(shader->info.mesh.primitive_type); uint64_t per_vertex_outputs = shader->info.outputs_written & ~shader->info.per_primitive_outputs & ~BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_COUNT) diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index 93fb7728c78..fcd5fd5e956 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -375,3 +375,18 @@ gl_frag_result_name(gl_frag_result result) STATIC_ASSERT(ARRAY_SIZE(names) == FRAG_RESULT_MAX); return NAME(result); } + +unsigned +num_mesh_vertices_per_primitive(unsigned prim) +{ + switch (prim) { + case SHADER_PRIM_POINTS: + return 1; + case SHADER_PRIM_LINES: + return 2; + case SHADER_PRIM_TRIANGLES: + return 3; + default: + unreachable("invalid mesh shader primitive type"); + } +} diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index cd944193ac7..098f370ce97 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -1045,6 +1045,11 @@ enum shader_prim SHADER_PRIM_UNKNOWN = (SHADER_PRIM_MAX * 2), }; +/** + * Number of vertices per mesh shader primitive. + */ +unsigned num_mesh_vertices_per_primitive(unsigned prim); + /** * A compare function enum for use in compiler lowering passes. This is in * the same order as GL's compare functions (shifted down by GL_NEVER), and is diff --git a/src/intel/compiler/brw_mesh.cpp b/src/intel/compiler/brw_mesh.cpp index c47162c9b9c..2c65015fe3a 100644 --- a/src/intel/compiler/brw_mesh.cpp +++ b/src/intel/compiler/brw_mesh.cpp @@ -300,20 +300,8 @@ brw_compute_mue_map(struct nir_shader *nir, struct brw_mue_map *map) for (int i = 0; i < VARYING_SLOT_MAX; i++) map->start_dw[i] = -1; - unsigned vertices_per_primitive = 0; - switch (nir->info.mesh.primitive_type) { - case SHADER_PRIM_POINTS: - vertices_per_primitive = 1; - break; - case SHADER_PRIM_LINES: - vertices_per_primitive = 2; - break; - case SHADER_PRIM_TRIANGLES: - vertices_per_primitive = 3; - break; - default: - unreachable("invalid primitive type"); - } + unsigned vertices_per_primitive = + num_mesh_vertices_per_primitive(nir->info.mesh.primitive_type); map->max_primitives = nir->info.mesh.max_primitives_out; map->max_vertices = nir->info.mesh.max_vertices_out;