summaryrefslogtreecommitdiff
path: root/src/amd
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2022-01-19 13:17:27 +1000
committerMarge Bot <emma+marge@anholt.net>2022-01-19 21:54:58 +0000
commit1352e0ba0cff7d0c590b89d8643262c85e12fc61 (patch)
treebd74be82245a8abbe3c93958424c37c088d6b6c8 /src/amd
parentd54c07b4c4ac726b5fa90eb3a315cb4345f14a49 (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.c10
-rw-r--r--src/amd/vulkan/radv_pipeline.c21
-rw-r--r--src/amd/vulkan/radv_private.h18
-rw-r--r--src/amd/vulkan/radv_shader.c6
-rw-r--r--src/amd/vulkan/radv_shader.h2
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;