From 459b4961bd3ef6143d80bf3c07b875a3006067b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Thu, 28 Oct 2021 16:45:18 +0200 Subject: [PATCH] radv: Add mesh shader specific info. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use the same old outinfo structure as other NGG shaders. Additionally, store the output primitive type. Signed-off-by: Timur Kristóf Acked-by: Bas Nieuwenhuizen Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_pipeline.c | 2 ++ src/amd/vulkan/radv_shader.h | 4 ++++ src/amd/vulkan/radv_shader_info.c | 5 +++++ 3 files changed, 11 insertions(+) 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; }