mesa: replace _NEW_EVAL with vbo_exec_update_eval_maps
[mesa.git] / src / mesa / main / api_arrayelt.c
index 81e4f91c45d6ff100b43540fbc3838ebb1a14b85..5df7b05fbd8883f76e5bdfd5ffa74e5ba439a9e8 100644 (file)
@@ -39,7 +39,7 @@
 #include "api_arrayelt.h"
 #include "bufferobj.h"
 #include "context.h"
-#include "imports.h"
+
 #include "macros.h"
 #include "mtypes.h"
 #include "main/dispatch.h"
@@ -486,7 +486,7 @@ VertexAttrib4dvNV(GLuint index, const GLdouble *v)
 /*
  * Array [size][type] of VertexAttrib functions
  */
-static attrib_func AttribFuncsNV[2][4][NUM_TYPES] = {
+static const attrib_func AttribFuncsNV[2][4][NUM_TYPES] = {
    {
       /* non-normalized */
       {
@@ -1413,17 +1413,19 @@ attrib_src(const struct gl_vertex_array_object *vao,
 {
    const struct gl_vertex_buffer_binding *binding =
       &vao->BufferBinding[array->BufferBindingIndex];
-   const GLubyte *src
-      = ADD_POINTERS(binding->BufferObj->Mappings[MAP_INTERNAL].Pointer,
-                     _mesa_vertex_attrib_address(array, binding))
-      + elt * binding->Stride;
-   return src;
+   const GLubyte *src = _mesa_vertex_attrib_address(array, binding);
+
+   if (binding->BufferObj) {
+      src = ADD_POINTERS(binding->BufferObj->Mappings[MAP_INTERNAL].Pointer,
+                         src);
+   }
+
+   return src + elt * binding->Stride;
 }
 
 
 void
-_mesa_array_element(struct gl_context *ctx,
-                    struct _glapi_table *disp, GLint elt)
+_mesa_array_element(struct gl_context *ctx, GLint elt)
 {
    const struct gl_vertex_array_object *vao = ctx->Array.VAO;
    GLbitfield mask;
@@ -1451,10 +1453,7 @@ _mesa_array_element(struct gl_context *ctx,
       const gl_vert_attrib attrib = VERT_ATTRIB_GENERIC0;
       const struct gl_array_attributes *array = &vao->VertexAttrib[attrib];
       const void *src = attrib_src(vao, array, elt);
-      /* Use glVertex(v) instead of glVertexAttrib(0, v) to be sure it's
-       * issued as the last (provoking) attribute).
-       */
-      func_nv(&array->Format)(0, src);
+      func_arb(&array->Format)(0, src);
    } else if (vao->Enabled & VERT_BIT_POS) {
       const gl_vert_attrib attrib = VERT_ATTRIB_POS;
       const struct gl_array_attributes *array = &vao->VertexAttrib[attrib];
@@ -1474,21 +1473,20 @@ void GLAPIENTRY
 _ae_ArrayElement(GLint elt)
 {
    GET_CURRENT_CONTEXT(ctx);
-   const struct _glapi_table * const disp = GET_DISPATCH();
    struct gl_vertex_array_object *vao;
 
    /* 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((struct _glapi_table *)disp, ());
+      CALL_PrimitiveRestartNV(GET_DISPATCH(), ());
       return;
    }
 
    vao = ctx->Array.VAO;
    _mesa_vao_map_arrays(ctx, vao, GL_MAP_READ_BIT);
 
-   _mesa_array_element(ctx, (struct _glapi_table *)disp, elt);
+   _mesa_array_element(ctx, elt);
 
    _mesa_vao_unmap_arrays(ctx, vao);
 }