mesa: Use _mesa_array_element in dlist save.

Make use of the newly factored out _mesa_array_element function
in display list compilation. For now that duplicates out the
primitive restart logic. But that turns out to need a fix in
display list handling anyhow.

Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
This commit is contained in:
Mathias Fröhlich 2019-03-01 09:27:53 +01:00
parent 80e319485a
commit b43fae364f

View file

@ -1330,7 +1330,7 @@ _save_OBE_DrawArrays(GLenum mode, GLint start, GLsizei count)
vbo_save_NotifyBegin(ctx, mode, true);
for (i = 0; i < count; i++)
CALL_ArrayElement(GET_DISPATCH(), (start + i));
_mesa_array_element(ctx, GET_DISPATCH(), start + i);
CALL_End(GET_DISPATCH(), ());
_ae_unmap_vbos(ctx);
@ -1371,6 +1371,21 @@ _save_OBE_MultiDrawArrays(GLenum mode, const GLint *first,
}
static void
array_element(struct gl_context *ctx, struct _glapi_table *disp, GLuint elt)
{
/* If PrimitiveRestart is enabled and the index is the RestartIndex
* then we call PrimitiveRestartNV and return.
*/
if (ctx->Array.PrimitiveRestart && elt == ctx->Array.RestartIndex) {
CALL_PrimitiveRestartNV(disp, ());
return;
}
_mesa_array_element(ctx, disp, elt);
}
/* Could do better by copying the arrays and element list intact and
* then emitting an indexed prim at runtime.
*/
@ -1415,15 +1430,15 @@ _save_OBE_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
switch (type) {
case GL_UNSIGNED_BYTE:
for (i = 0; i < count; i++)
CALL_ArrayElement(GET_DISPATCH(), (basevertex + ((GLubyte *) indices)[i]));
array_element(ctx, GET_DISPATCH(), (basevertex + ((GLubyte *) indices)[i]));
break;
case GL_UNSIGNED_SHORT:
for (i = 0; i < count; i++)
CALL_ArrayElement(GET_DISPATCH(), (basevertex + ((GLushort *) indices)[i]));
array_element(ctx, GET_DISPATCH(), (basevertex + ((GLushort *) indices)[i]));
break;
case GL_UNSIGNED_INT:
for (i = 0; i < count; i++)
CALL_ArrayElement(GET_DISPATCH(), (basevertex + ((GLuint *) indices)[i]));
array_element(ctx, GET_DISPATCH(), (basevertex + ((GLuint *) indices)[i]));
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glDrawElements(type)");