From e9f13397d9fd1c2e5c0b062ff2ccdf68c99627c0 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 11 Nov 2020 09:17:32 +0100 Subject: [PATCH] radv: fix applying the NGG minimum vertex count requirement Ported from RadeonSI. The restriction was applied too late. Cc: 20.2 Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: (cherry picked from commit c5e8f6700bf4c50cd273ed2f6c476c66557ccc37) --- src/amd/vulkan/radv_pipeline.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 349a6d197ec..ef57e51a062 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2067,6 +2067,8 @@ gfx10_get_ngg_info(const struct radv_pipeline_key *key, (max_lds_size - max_gsprims * gsprim_lds_size) / esvert_lds_size); max_esverts = MIN2(max_esverts, max_gsprims * max_verts_per_prim); + /* Hardware restriction: minimum value of max_esverts */ + max_esverts = MAX2(max_esverts, min_esverts - 1 + max_verts_per_prim); max_gsprims = align(max_gsprims, wavesize); max_gsprims = MIN2(max_gsprims, max_gsprims_base); @@ -2078,10 +2080,13 @@ gfx10_get_ngg_info(const struct radv_pipeline_key *key, min_verts_per_prim, uses_adjacency); assert(max_esverts >= max_verts_per_prim && max_gsprims >= 1); } while (orig_max_esverts != max_esverts || orig_max_gsprims != max_gsprims); - } - /* Hardware restriction: minimum value of max_esverts */ - max_esverts = MAX2(max_esverts, min_esverts - 1 + max_verts_per_prim); + /* Verify the restriction. */ + assert(max_esverts >= min_esverts - 1 + max_verts_per_prim); + } else { + /* Hardware restriction: minimum value of max_esverts */ + max_esverts = MAX2(max_esverts, min_esverts - 1 + max_verts_per_prim); + } unsigned max_out_vertices = max_vert_out_per_gs_instance ? gs_info->gs.vertices_out :