mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 00:10:20 +01:00
mesa: add implementation of glDrawElementsInstancedBaseVertex
Signed-off-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
0dae94610e
commit
09201cc7a0
5 changed files with 35 additions and 4 deletions
|
|
@ -396,7 +396,8 @@ _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint fi
|
|||
GLboolean
|
||||
_mesa_validate_DrawElementsInstanced(struct gl_context *ctx,
|
||||
GLenum mode, GLsizei count, GLenum type,
|
||||
const GLvoid *indices, GLsizei numInstances)
|
||||
const GLvoid *indices, GLsizei numInstances,
|
||||
GLint basevertex)
|
||||
{
|
||||
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
|
||||
|
||||
|
|
@ -447,7 +448,7 @@ _mesa_validate_DrawElementsInstanced(struct gl_context *ctx,
|
|||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (!check_index_bounds(ctx, count, type, indices, 0))
|
||||
if (!check_index_bounds(ctx, count, type, indices, basevertex))
|
||||
return GL_FALSE;
|
||||
|
||||
return GL_TRUE;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,8 @@ _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint fi
|
|||
extern GLboolean
|
||||
_mesa_validate_DrawElementsInstanced(struct gl_context *ctx,
|
||||
GLenum mode, GLsizei count, GLenum type,
|
||||
const GLvoid *indices, GLsizei primcount);
|
||||
const GLvoid *indices, GLsizei primcount,
|
||||
GLint basevertex);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1177,6 +1177,9 @@ typedef struct {
|
|||
void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count,
|
||||
GLenum type, const GLvoid *indices,
|
||||
GLsizei primcount);
|
||||
void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count,
|
||||
GLenum type, const GLvoid *indices,
|
||||
GLsizei primcount, GLint basevertex);
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
|
|||
SET_MultiDrawElementsBaseVertex(tab, vfmt->MultiDrawElementsBaseVertex);
|
||||
SET_DrawArraysInstancedARB(tab, vfmt->DrawArraysInstanced);
|
||||
SET_DrawElementsInstancedARB(tab, vfmt->DrawElementsInstanced);
|
||||
SET_DrawElementsInstancedBaseVertex(tab, vfmt->DrawElementsInstancedBaseVertex);
|
||||
|
||||
/* GL_NV_vertex_program */
|
||||
SET_VertexAttrib1fNV(tab, vfmt->VertexAttrib1fNV);
|
||||
|
|
|
|||
|
|
@ -1045,13 +1045,37 @@ vbo_exec_DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type,
|
|||
_mesa_lookup_enum_by_nr(type), indices, numInstances);
|
||||
|
||||
if (!_mesa_validate_DrawElementsInstanced(ctx, mode, count, type, indices,
|
||||
numInstances))
|
||||
numInstances, 0))
|
||||
return;
|
||||
|
||||
vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
|
||||
count, type, indices, 0, numInstances);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by glDrawElementsInstancedBaseVertex() in immediate mode.
|
||||
*/
|
||||
static void GLAPIENTRY
|
||||
vbo_exec_DrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type,
|
||||
const GLvoid *indices, GLsizei numInstances,
|
||||
GLint basevertex)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_DRAW)
|
||||
_mesa_debug(ctx, "glDrawElementsInstancedBaseVertex(%s, %d, %s, %p, %d; %d)\n",
|
||||
_mesa_lookup_enum_by_nr(mode), count,
|
||||
_mesa_lookup_enum_by_nr(type), indices,
|
||||
numInstances, basevertex);
|
||||
|
||||
if (!_mesa_validate_DrawElementsInstanced(ctx, mode, count, type, indices,
|
||||
numInstances, basevertex))
|
||||
return;
|
||||
|
||||
vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
|
||||
count, type, indices, basevertex, numInstances);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Inner support for both _mesa_MultiDrawElements() and
|
||||
|
|
@ -1260,6 +1284,7 @@ vbo_exec_array_init( struct vbo_exec_context *exec )
|
|||
exec->vtxfmt.MultiDrawElementsBaseVertex = vbo_exec_MultiDrawElementsBaseVertex;
|
||||
exec->vtxfmt.DrawArraysInstanced = vbo_exec_DrawArraysInstanced;
|
||||
exec->vtxfmt.DrawElementsInstanced = vbo_exec_DrawElementsInstanced;
|
||||
exec->vtxfmt.DrawElementsInstancedBaseVertex = vbo_exec_DrawElementsInstancedBaseVertex;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue