mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 11:30:21 +01:00
st/mesa: only set primitive_restart when the restart index is in range
Even when enabled, primitive restart has no effect when the restart index is larger than the representable values in the index buffer. Fixes GL45-CTS.gtf31.GL3Tests.primitive_restart.primitive_restart_upconvert for radeonsi VI. v2: add an explanatory comment Cc: "12.0 13.0" <mesa-stable@lists.freedesktop.org> Reviewed-by: Marek Olšák <marek.olsak@amd.com> (v1)
This commit is contained in:
parent
3d9b57e493
commit
bfa50f88ce
1 changed files with 13 additions and 2 deletions
|
|
@ -205,8 +205,19 @@ st_draw_vbo(struct gl_context *ctx,
|
|||
/* The VBO module handles restart for the non-indexed GLDrawArrays
|
||||
* so we only set these fields for indexed drawing:
|
||||
*/
|
||||
info.primitive_restart = ctx->Array._PrimitiveRestart;
|
||||
info.restart_index = _mesa_primitive_restart_index(ctx, ib->type);
|
||||
if (ctx->Array._PrimitiveRestart) {
|
||||
info.restart_index = _mesa_primitive_restart_index(ctx, ib->type);
|
||||
|
||||
/* Enable primitive restart only when the restart index can have an
|
||||
* effect. This is required for correctness in radeonsi VI support,
|
||||
* though other hardware may also benefit from taking a faster,
|
||||
* non-restart path when possible.
|
||||
*/
|
||||
if ((ibuffer.index_size >= 4) ||
|
||||
(ibuffer.index_size >= 2 && info.restart_index <= 0xffff) ||
|
||||
(info.restart_index <= 0xff))
|
||||
info.primitive_restart = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Transform feedback drawing is always non-indexed. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue