radv: set the maximum possible workgroup size for legacy GS before linking
The optimal workgroup size will be set after lowering. Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35473>
This commit is contained in:
@@ -888,23 +888,6 @@ unsigned ac_compute_lshs_workgroup_size(enum amd_gfx_level gfx_level, gl_shader_
|
||||
unreachable("invalid LSHS shader stage");
|
||||
}
|
||||
|
||||
unsigned ac_compute_esgs_workgroup_size(enum amd_gfx_level gfx_level, unsigned wave_size,
|
||||
unsigned es_verts, unsigned gs_inst_prims)
|
||||
{
|
||||
/* ESGS may operate in workgroups if on-chip GS (LDS rings) are enabled.
|
||||
*
|
||||
* GFX6: Not possible in the HW.
|
||||
* GFX7-8 (unmerged): possible in the HW, but not implemented in Mesa.
|
||||
* GFX9+ (merged): implemented in Mesa.
|
||||
*/
|
||||
|
||||
if (gfx_level <= GFX8)
|
||||
return wave_size;
|
||||
|
||||
unsigned workgroup_size = MAX2(es_verts, gs_inst_prims);
|
||||
return CLAMP(workgroup_size, 1, 256);
|
||||
}
|
||||
|
||||
unsigned ac_compute_ngg_workgroup_size(unsigned es_verts, unsigned gs_inst_prims,
|
||||
unsigned max_vtx_out, unsigned prim_amp_factor)
|
||||
{
|
||||
|
||||
@@ -287,9 +287,6 @@ unsigned ac_compute_lshs_workgroup_size(enum amd_gfx_level gfx_level, gl_shader_
|
||||
unsigned tess_patch_in_vtx,
|
||||
unsigned tess_patch_out_vtx);
|
||||
|
||||
unsigned ac_compute_esgs_workgroup_size(enum amd_gfx_level gfx_level, unsigned wave_size,
|
||||
unsigned es_verts, unsigned gs_inst_prims);
|
||||
|
||||
unsigned ac_compute_ngg_workgroup_size(unsigned es_verts, unsigned gs_inst_prims,
|
||||
unsigned max_vtx_out, unsigned prim_amp_factor);
|
||||
|
||||
|
||||
@@ -1265,11 +1265,20 @@ radv_nir_shader_info_pass(struct radv_device *device, const struct nir_shader *n
|
||||
break;
|
||||
case MESA_SHADER_GEOMETRY:
|
||||
if (!info->is_ngg) {
|
||||
unsigned es_verts_per_subgroup = info->gs_ring_info.es_verts_per_subgroup;
|
||||
unsigned gs_inst_prims_in_subgroup = info->gs_ring_info.gs_inst_prims_in_subgroup;
|
||||
/* ESGS may operate in workgroups if on-chip GS (LDS rings) are enabled.
|
||||
*
|
||||
* GFX6: Not possible in the HW.
|
||||
* GFX7-8 (unmerged): possible in the HW, but not implemented in Mesa.
|
||||
* GFX9+ (merged): implemented in Mesa.
|
||||
*
|
||||
* Set the maximum possible value by default, this will be optimized during linking if
|
||||
* possible.
|
||||
*/
|
||||
if (pdev->info.gfx_level <= GFX8)
|
||||
info->workgroup_size = info->wave_size;
|
||||
else
|
||||
info->workgroup_size = 256;
|
||||
|
||||
info->workgroup_size = ac_compute_esgs_workgroup_size(pdev->info.gfx_level, info->wave_size,
|
||||
es_verts_per_subgroup, gs_inst_prims_in_subgroup);
|
||||
} else {
|
||||
/* Set the maximum possible value by default, this will be optimized during linking if
|
||||
* possible.
|
||||
|
||||
Reference in New Issue
Block a user