diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index fd8cf558c72..7d5967221ad 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2349,6 +2349,8 @@ get_vs_output_info(const struct radv_pipeline *pipeline) return &pipeline->gs_copy_shader->info.vs.outinfo; else if (radv_pipeline_has_tess(pipeline)) return &pipeline->shaders[MESA_SHADER_TESS_EVAL]->info.tes.outinfo; + else if (radv_pipeline_has_mesh(pipeline)) + return &pipeline->shaders[MESA_SHADER_MESH]->info.ms.outinfo; else return &pipeline->shaders[MESA_SHADER_VERTEX]->info.vs.outinfo; } diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index 408f47115b8..2d088b9d5c5 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -348,6 +348,10 @@ struct radv_shader_info { uint8_t num_linked_patch_outputs; bool tes_reads_tess_factors : 1; } tcs; + struct { + struct radv_vs_output_info outinfo; + uint16_t output_prim; /* Output primitive type: GL_POINTS, GL_LINES or GL_TRIANGLES. */ + } ms; struct radv_streamout_info so; diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index ea9d546c60c..ff0bd79f407 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -493,6 +493,8 @@ get_vs_output_info(const nir_shader *nir, struct radv_shader_info *info) if (!info->tes.as_es) return &info->tes.outinfo; break; + case MESA_SHADER_MESH: + return &info->ms.outinfo; default: break; } @@ -727,6 +729,9 @@ radv_nir_shader_info_pass(struct radv_device *device, const struct nir_shader *n break; case MESA_SHADER_VERTEX: break; + case MESA_SHADER_MESH: + info->ms.output_prim = nir->info.mesh.primitive_type; + break; default: break; }