From ba81dcf9715e8422b403fa79de4d8726a71eddbb Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 17 Nov 2022 08:07:25 +0100 Subject: [PATCH] radv: fix computing the pervertex LDS size with NGG streamout The NGG streamout lowering pass allocates space for all outputs which means we have to align our computation. Otherwise, the maximum number of vertices is incorrect and we end up by reaching the maximum allowed LDS size. This code could be shared instead of being duplicated but that's for later. Fixes some transform feedback tests with Zink and RADV_PERFTEST=ngg_streamout on GFX10.3. Cc: 22.3 mesa-stable Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/vulkan/radv_shader_info.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index 8e8ec56c1ad..3625fe2a2e7 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -1048,8 +1048,13 @@ gfx10_get_ngg_info(const struct radv_device *device, struct radv_pipeline_stage /* LDS size for passing data from GS to ES. */ struct radv_streamout_info *so_info = &es_info->so; - if (so_info->num_outputs) - esvert_lds_size = 4 * so_info->num_outputs + 1; + if (so_info->num_outputs) { + /* Compute the same pervertex LDS size as the NGG streamout lowering pass which allocates + * space for all outputs. + * TODO: only alloc space for outputs that really need streamout. + */ + esvert_lds_size = 4 * es_stage->nir->num_outputs + 1; + } /* GS stores Primitive IDs (one DWORD) into LDS at the address * corresponding to the ES thread of the provoking vertex. All