mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
radv: Fix gs_vgpr_comp_cnt for NGG VS without passthrough mode.
When not in passthrough mode, the NGG shader needs to calculate the
primitive export value from the input primitive's vertex indices.
So, GS vertex offset 2 is needed when NGG has triangles
and isn't in passthrough mode.
Fixes: 7ad69e2f7e "radv: stop loading invocation ID for NGG vertex shaders"
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15837>
This commit is contained in:
parent
a7147ef1e8
commit
e02c71d6c5
1 changed files with 14 additions and 5 deletions
|
|
@ -1675,18 +1675,27 @@ radv_postprocess_config(const struct radv_device *device, const struct ac_shader
|
|||
unreachable("Unexpected ES shader stage");
|
||||
}
|
||||
|
||||
bool nggc = info->has_ngg_culling; /* Culling uses GS vertex offsets 0, 1, 2. */
|
||||
bool tes_triangles =
|
||||
stage == MESA_SHADER_TESS_EVAL && info->tes._primitive_mode != TESS_PRIMITIVE_ISOLINES;
|
||||
/* GS vertex offsets in NGG:
|
||||
* - in passthrough mode, they are all packed into VGPR0
|
||||
* - in the default mode: VGPR0: offsets 0, 1; VGPR1: offsets 2, 3
|
||||
*
|
||||
* The vertex offset 2 is always needed when NGG isn't in passthrough mode
|
||||
* and uses triangle input primitives, including with NGG culling.
|
||||
*/
|
||||
bool need_gs_vtx_offset2 = !info->is_ngg_passthrough || info->gs.vertices_in >= 3;
|
||||
|
||||
if (stage == MESA_SHADER_TESS_EVAL)
|
||||
need_gs_vtx_offset2 &= info->tes._primitive_mode != TESS_PRIMITIVE_ISOLINES;
|
||||
|
||||
if (info->uses_invocation_id) {
|
||||
gs_vgpr_comp_cnt = 3; /* VGPR3 contains InvocationID. */
|
||||
} else if (info->uses_prim_id || (es_stage == MESA_SHADER_VERTEX &&
|
||||
info->vs.outinfo.export_prim_id)) {
|
||||
gs_vgpr_comp_cnt = 2; /* VGPR2 contains PrimitiveID. */
|
||||
} else if (info->gs.vertices_in >= 3 || tes_triangles || nggc) {
|
||||
} else if (need_gs_vtx_offset2) {
|
||||
gs_vgpr_comp_cnt = 1; /* VGPR1 contains offsets 2, 3 */
|
||||
} else {
|
||||
gs_vgpr_comp_cnt = 0; /* VGPR0 contains offsets 0, 1 */
|
||||
gs_vgpr_comp_cnt = 0; /* VGPR0 contains offsets 0, 1 (or passthrough prim) */
|
||||
}
|
||||
|
||||
/* Disable the WGP mode on gfx10.3 because it can hang. (it
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue