diff options
author | Dave Airlie <airlied@redhat.com> | 2022-01-19 13:17:27 +1000 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-01-19 21:54:58 +0000 |
commit | 1352e0ba0cff7d0c590b89d8643262c85e12fc61 (patch) | |
tree | bd74be82245a8abbe3c93958424c37c088d6b6c8 /src/amd | |
parent | d54c07b4c4ac726b5fa90eb3a315cb4345f14a49 (diff) |
mesa/*: add a shader primitive type to get away from GL types.
This creates an internal shader_prim enum, I've fixed up most
users to use it instead of GL types.
don't store the enum in shader_info as it changes size, and confuses
other things.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14605>
Diffstat (limited to 'src/amd')
-rw-r--r-- | src/amd/common/ac_nir_lower_ngg.c | 10 | ||||
-rw-r--r-- | src/amd/vulkan/radv_pipeline.c | 21 | ||||
-rw-r--r-- | src/amd/vulkan/radv_private.h | 18 | ||||
-rw-r--r-- | src/amd/vulkan/radv_shader.c | 6 | ||||
-rw-r--r-- | src/amd/vulkan/radv_shader.h | 2 |
5 files changed, 28 insertions, 29 deletions
diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c index 53abbb9e886..61b8a2d5dec 100644 --- a/src/amd/common/ac_nir_lower_ngg.c +++ b/src/amd/common/ac_nir_lower_ngg.c @@ -1891,11 +1891,11 @@ ac_nir_lower_ngg_gs(nir_shader *shader, if (!state.output_compile_time_known) state.current_clear_primflag_idx_var = nir_local_variable_create(impl, glsl_uint_type(), "current_clear_primflag_idx"); - if (shader->info.gs.output_primitive == GL_POINTS) + if (shader->info.gs.output_primitive == SHADER_PRIM_POINTS) state.num_vertices_per_primitive = 1; - else if (shader->info.gs.output_primitive == GL_LINE_STRIP) + else if (shader->info.gs.output_primitive == SHADER_PRIM_LINE_STRIP) state.num_vertices_per_primitive = 2; - else if (shader->info.gs.output_primitive == GL_TRIANGLE_STRIP) + else if (shader->info.gs.output_primitive == SHADER_PRIM_TRIANGLE_STRIP) state.num_vertices_per_primitive = 3; else unreachable("Invalid GS output primitive."); @@ -2416,9 +2416,9 @@ ac_nir_lower_ngg_ms(nir_shader *shader, assert(impl); unsigned vertices_per_prim = 3; - if (shader->info.mesh.primitive_type == GL_POINTS) + if (shader->info.mesh.primitive_type == SHADER_PRIM_POINTS) vertices_per_prim = 1; - else if (shader->info.mesh.primitive_type == GL_LINES) + else if (shader->info.mesh.primitive_type == SHADER_PRIM_LINES) vertices_per_prim = 2; uint64_t per_vertex_outputs = shader->info.outputs_written & ~shader->info.per_primitive_outputs diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index b666101dd5a..fc4cde38ef2 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -1302,18 +1302,17 @@ static uint32_t si_conv_gl_prim_to_gs_out(unsigned gl_prim) { switch (gl_prim) { - case 0: /* GL_POINTS */ + case SHADER_PRIM_POINTS: return V_028A6C_POINTLIST; - case 1: /* GL_LINES */ - case 3: /* GL_LINE_STRIP */ - case 0xA: /* GL_LINES_ADJACENCY */ - case 0x8E7A: /* GL_ISOLINES */ + case SHADER_PRIM_LINES: + case SHADER_PRIM_LINE_STRIP: + case SHADER_PRIM_LINES_ADJACENCY: return V_028A6C_LINESTRIP; - case 4: /* GL_TRIANGLES */ - case 0xc: /* GL_TRIANGLES_ADJACENCY_ARB */ - case 5: /* GL_TRIANGLE_STRIP */ - case 7: /* GL_QUADS */ + case SHADER_PRIM_TRIANGLES: + case SHADER_PRIM_TRIANGLE_STRIP_ADJACENCY: + case SHADER_PRIM_TRIANGLE_STRIP: + case SHADER_PRIM_QUADS: return V_028A6C_TRISTRIP; default: assert(0); @@ -2603,8 +2602,8 @@ radv_link_shaders(struct radv_pipeline *pipeline, info->stage == pipeline->graphics.last_vgt_api_stage && ((info->stage == MESA_SHADER_VERTEX && pipeline_key->vs.topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST) || (info->stage == MESA_SHADER_TESS_EVAL && info->tess.point_mode) || - (info->stage == MESA_SHADER_GEOMETRY && info->gs.output_primitive == GL_POINTS) || - (info->stage == MESA_SHADER_MESH && info->mesh.primitive_type == GL_POINTS)); + (info->stage == MESA_SHADER_GEOMETRY && info->gs.output_primitive == SHADER_PRIM_POINTS) || + (info->stage == MESA_SHADER_MESH && info->mesh.primitive_type == SHADER_PRIM_POINTS)); nir_variable *psiz_var = nir_find_variable_with_location(ordered_shaders[i], nir_var_shader_out, VARYING_SLOT_PSIZ); diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 53f42ed3f81..e4bda1027c8 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2670,22 +2670,22 @@ void radv_describe_layout_transition(struct radv_cmd_buffer *cmd_buffer, uint64_t radv_get_current_time(void); static inline uint32_t -si_conv_gl_prim_to_vertices(unsigned gl_prim) +si_conv_gl_prim_to_vertices(enum shader_prim gl_prim) { switch (gl_prim) { - case 0: /* GL_POINTS */ + case SHADER_PRIM_POINTS: return 1; - case 1: /* GL_LINES */ - case 3: /* GL_LINE_STRIP */ + case SHADER_PRIM_LINES: + case SHADER_PRIM_LINE_STRIP: return 2; - case 4: /* GL_TRIANGLES */ - case 5: /* GL_TRIANGLE_STRIP */ + case SHADER_PRIM_TRIANGLES: + case SHADER_PRIM_TRIANGLE_STRIP: return 3; - case 0xA: /* GL_LINES_ADJACENCY */ + case SHADER_PRIM_LINES_ADJACENCY: return 4; - case 0xc: /* GL_TRIANGLES_ADJACENCY */ + case SHADER_PRIM_TRIANGLES_ADJACENCY: return 6; - case 7: /* GL_QUADS */ + case SHADER_PRIM_QUADS: return V_028A6C_TRISTRIP; default: assert(0); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 1ff5b683ab1..d7c59c77bf1 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -1039,12 +1039,12 @@ void radv_lower_ngg(struct radv_device *device, struct nir_shader *nir, } else if (nir->info.stage == MESA_SHADER_GEOMETRY) { num_vertices_per_prim = nir->info.gs.vertices_in; } else if (nir->info.stage == MESA_SHADER_MESH) { - if (nir->info.mesh.primitive_type == GL_POINTS) + if (nir->info.mesh.primitive_type == SHADER_PRIM_POINTS) num_vertices_per_prim = 1; - else if (nir->info.mesh.primitive_type == GL_LINES) + else if (nir->info.mesh.primitive_type == SHADER_PRIM_LINES) num_vertices_per_prim = 2; else - assert(nir->info.mesh.primitive_type == GL_TRIANGLES); + assert(nir->info.mesh.primitive_type == SHADER_PRIM_TRIANGLES); } else { unreachable("NGG needs to be VS, TES or GS."); } diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index 840ca4e0c17..2a77e9de375 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -358,7 +358,7 @@ struct radv_shader_info { } tcs; struct { struct radv_vs_output_info outinfo; - uint16_t output_prim; /* Output primitive type: GL_POINTS, GL_LINES or GL_TRIANGLES. */ + enum shader_prim output_prim; } ms; struct radv_streamout_info so; |