mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +02:00
vbo: Ignore PRIMITIVE_RESTART_FIXED_INDEX for glDrawArrays().
The derived _PrimitiveRestart enable flag combines the PrimitiveRestart
and PrimitiveRestartFixedIndex enable flags. However, DrawArrays is not
supposed to do FixedIndex restart:
From the OpenGL 4.3 Core specification, section 10.3.5 (page 302):
"If PRIMITIVE_RESTART_FIXED_INDEX is enabled, primitive restart is not
performed for array elements transferred by any drawing command not
taking a type parameter, including all of the *Draw* commands other
than *DrawElements*."
The OpenGL ES 3.0 specification agrees by omission:
"When DrawElements, DrawElementsInstanced, or DrawRangeElements
transfers a set of generic attribute array elements to the GL..."
Notably, DrawArrays is not included in the list of draw calls that
take PRIMITIVE_RESTART_FIXED_INDEX into consideration.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
(cherry picked from commit 37f278000c)
This commit is contained in:
parent
fa0bd4dd85
commit
21eb628e89
1 changed files with 5 additions and 5 deletions
|
|
@ -576,10 +576,10 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
|
|||
prim[0].base_instance = baseInstance;
|
||||
|
||||
/* Implement the primitive restart index */
|
||||
if (ctx->Array._PrimitiveRestart && ctx->Array._RestartIndex < count) {
|
||||
if (ctx->Array.PrimitiveRestart && ctx->Array.RestartIndex < count) {
|
||||
GLuint primCount = 0;
|
||||
|
||||
if (ctx->Array._RestartIndex == start) {
|
||||
if (ctx->Array.RestartIndex == start) {
|
||||
/* special case: RestartIndex at beginning */
|
||||
if (count > 1) {
|
||||
prim[0].start = start + 1;
|
||||
|
|
@ -587,7 +587,7 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
|
|||
primCount = 1;
|
||||
}
|
||||
}
|
||||
else if (ctx->Array._RestartIndex == start + count - 1) {
|
||||
else if (ctx->Array.RestartIndex == start + count - 1) {
|
||||
/* special case: RestartIndex at end */
|
||||
if (count > 1) {
|
||||
prim[0].start = start;
|
||||
|
|
@ -598,10 +598,10 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
|
|||
else {
|
||||
/* general case: RestartIndex in middle, split into two prims */
|
||||
prim[0].start = start;
|
||||
prim[0].count = ctx->Array._RestartIndex - start;
|
||||
prim[0].count = ctx->Array.RestartIndex - start;
|
||||
|
||||
prim[1] = prim[0];
|
||||
prim[1].start = ctx->Array._RestartIndex + 1;
|
||||
prim[1].start = ctx->Array.RestartIndex + 1;
|
||||
prim[1].count = count - prim[1].start;
|
||||
|
||||
primCount = 2;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue