radv: don't count unusable vertices to the NGG LDS size

Ported from RadeonSI.

To get optimal LDS usage since the previous change.

Cc: 20.2
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7566>
This commit is contained in:
Samuel Pitoiset 2020-11-11 09:20:52 +01:00 committed by Marge Bot
parent c5e8f6700b
commit f777d00a75
1 changed files with 15 additions and 5 deletions

View File

@ -2078,10 +2078,17 @@ gfx10_get_ngg_info(const struct radv_pipeline_key *key,
max_gsprims = align(max_gsprims, wavesize);
max_gsprims = MIN2(max_gsprims, max_gsprims_base);
if (gsprim_lds_size)
max_gsprims = MIN2(max_gsprims,
(max_lds_size - max_esverts * esvert_lds_size) /
gsprim_lds_size);
if (gsprim_lds_size) {
/* Don't count unusable vertices to the LDS
* size. Those are vertices above the maximum
* number of vertices that can occur in the
* workgroup, which is e.g. max_gsprims * 3
* for triangles.
*/
unsigned usable_esverts = MIN2(max_esverts, max_gsprims * max_verts_per_prim);
max_gsprims =
MIN2(max_gsprims, (max_lds_size - usable_esverts * esvert_lds_size) / gsprim_lds_size);
}
clamp_gsprims_to_esverts(&max_gsprims, max_esverts,
min_verts_per_prim, uses_adjacency);
assert(max_esverts >= max_verts_per_prim && max_gsprims >= 1);
@ -2119,7 +2126,10 @@ gfx10_get_ngg_info(const struct radv_pipeline_key *key,
ngg->prim_amp_factor = prim_amp_factor;
ngg->max_vert_out_per_gs_instance = max_vert_out_per_gs_instance;
ngg->ngg_emit_size = max_gsprims * gsprim_lds_size;
ngg->esgs_ring_size = 4 * max_esverts * esvert_lds_size;
/* Don't count unusable vertices. */
ngg->esgs_ring_size =
MIN2(max_esverts, max_gsprims * max_verts_per_prim) * esvert_lds_size * 4;
if (gs_type == MESA_SHADER_GEOMETRY) {
ngg->vgt_esgs_ring_itemsize = es_info->esgs_itemsize / 4;