X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fapi_arrayelt.c;h=cb0d2a28a6c6e3ffaa6146e95b2d97e0d01ecee0;hb=80e319485a5ba653856c107e7c84ee60d28251b1;hp=2b59c478d9eaae9a12d0b84cb6a03e1459b662ef;hpb=0a7020b4e60ef69e0e4b38aee31bfce385e594d8;p=mesa.git diff --git a/src/mesa/main/api_arrayelt.c b/src/mesa/main/api_arrayelt.c index 2b59c478d9e..cb0d2a28a6c 100644 --- a/src/mesa/main/api_arrayelt.c +++ b/src/mesa/main/api_arrayelt.c @@ -1751,6 +1751,35 @@ _ae_unmap_vbos(struct gl_context *ctx) } +void +_mesa_array_element(struct gl_context *ctx, + struct _glapi_table *disp, GLint elt) +{ + const AEcontext *actx = AE_CONTEXT(ctx); + + if (actx->dirty_state) + _ae_update_state(ctx); + + /* emit generic attribute elements */ + for (const AEattrib *at = actx->attribs; at->func; at++) { + const GLubyte *src + = ADD_POINTERS(at->binding->BufferObj->Mappings[MAP_INTERNAL].Pointer, + _mesa_vertex_attrib_address(at->array, at->binding)) + + elt * at->binding->Stride; + at->func(at->index, src); + } + + /* emit conventional arrays elements */ + for (const AEarray *aa = actx->arrays; aa->offset != -1 ; aa++) { + const GLubyte *src + = ADD_POINTERS(aa->binding->BufferObj->Mappings[MAP_INTERNAL].Pointer, + _mesa_vertex_attrib_address(aa->array, aa->binding)) + + elt * aa->binding->Stride; + CALL_by_offset(disp, (array_func), aa->offset, ((const void *) src)); + } +} + + /** * Called via glArrayElement() and glDrawArrays(). * Issue the glNormal, glVertex, glColor, glVertexAttrib, etc functions @@ -1762,8 +1791,6 @@ _ae_ArrayElement(GLint elt) { GET_CURRENT_CONTEXT(ctx); const AEcontext *actx = AE_CONTEXT(ctx); - const AEarray *aa; - const AEattrib *at; const struct _glapi_table * const disp = GET_DISPATCH(); GLboolean do_map; @@ -1786,23 +1813,7 @@ _ae_ArrayElement(GLint elt) if (do_map) _ae_map_vbos(ctx); - /* emit generic attribute elements */ - for (at = actx->attribs; at->func; at++) { - const GLubyte *src - = ADD_POINTERS(at->binding->BufferObj->Mappings[MAP_INTERNAL].Pointer, - _mesa_vertex_attrib_address(at->array, at->binding)) - + elt * at->binding->Stride; - at->func(at->index, src); - } - - /* emit conventional arrays elements */ - for (aa = actx->arrays; aa->offset != -1 ; aa++) { - const GLubyte *src - = ADD_POINTERS(aa->binding->BufferObj->Mappings[MAP_INTERNAL].Pointer, - _mesa_vertex_attrib_address(aa->array, aa->binding)) - + elt * aa->binding->Stride; - CALL_by_offset(disp, (array_func), aa->offset, ((const void *) src)); - } + _mesa_array_element(ctx, (struct _glapi_table *)disp, elt); if (do_map) _ae_unmap_vbos(ctx);