<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 18, 2015 at 4:18 PM, Fredrik Höglund <span dir="ltr"><<a href="mailto:fredrik@kde.org" target="_blank">fredrik@kde.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 src/mapi/glapi/gen/ARB_direct_state_access.xml |  7 +++++++<br>
 src/mesa/main/arrayobj.c                       | 20 +++++++++++++++-----<br>
 src/mesa/main/arrayobj.h                       |  2 ++<br>
 src/mesa/main/tests/dispatch_sanity.cpp        |  1 +<br>
 4 files changed, 25 insertions(+), 5 deletions(-)<br>
<br>
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml<br>
index 641e68f..f5097e7 100644<br>
--- a/src/mapi/glapi/gen/ARB_direct_state_access.xml<br>
+++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml<br>
@@ -379,5 +379,12 @@<br>
       <param name="params" type="GLint *" /><br>
    </function><br>
<br>
+   <!-- Vertex Array object functions --><br>
+<br>
+   <function name="CreateVertexArrays" offset="assign"><br>
+      <param name="n" type="GLsizei" /><br>
+      <param name="arrays" type="GLuint *" /><br>
+   </function><br>
+<br>
 </category><br>
 </OpenGLAPI><br>
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c<br>
index 3c8ffb5..0c15630 100644<br>
--- a/src/mesa/main/arrayobj.c<br>
+++ b/src/mesa/main/arrayobj.c<br>
@@ -486,13 +486,14 @@ _mesa_DeleteVertexArrays(GLsizei n, const GLuint *ids)<br>
  * \param vboOnly Will arrays have to reside in VBOs?<br>
  */<br></blockquote><div>I'd maybe put a comment here about how, for simplicity in handling VAOs in Mesa, we create the state vectors both for Gen and Create.  The only difference is the state of ever bound.  The spec has the usual interpretation of Gen as providing a reserved name rather than a created object.<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 static void<br>
-gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays)<br>
+gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays,<br>
+                  bool dsa, const char *func)<br>
 {<br>
    GLuint first;<br>
    GLint i;<br>
<br>
    if (n < 0) {<br>
-      _mesa_error(ctx, GL_INVALID_VALUE, "glGenVertexArrays");<br>
+      _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", func);<br>
       return;<br>
    }<br>
<br>
@@ -509,9 +510,10 @@ gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays)<br>
<br>
       obj = (*ctx->Driver.NewArrayObject)( ctx, name );<br>
       if (!obj) {<br>
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArrays");<br>
+         _mesa_error(ctx, GL_OUT_OF_MEMORY, func);<br>
          return;<br>
       }<br>
+      obj->EverBound = dsa;<br>
       save_array_object(ctx, obj);<br>
       arrays[i] = first + i;<br>
    }<br>
@@ -526,7 +528,7 @@ void GLAPIENTRY<br>
 _mesa_GenVertexArrays(GLsizei n, GLuint *arrays)<br>
 {<br>
    GET_CURRENT_CONTEXT(ctx);<br>
-   gen_vertex_arrays(ctx, n, arrays);<br>
+   gen_vertex_arrays(ctx, n, arrays, false, "glGenVertexArrays");<br>
 }<br>
<br>
<br>
@@ -538,7 +540,15 @@ void GLAPIENTRY<br>
 _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays)<br>
 {<br>
    GET_CURRENT_CONTEXT(ctx);<br>
-   gen_vertex_arrays(ctx, n, arrays);<br>
+   gen_vertex_arrays(ctx, n, arrays, false, "glGenVertexArraysAPPLE");<br>
+}<br>
+<br>
+<br>
+void GLAPIENTRY<br>
+_mesa_CreateVertexArrays(GLsizei n, GLuint *arrays)<br>
+{<br>
+   GET_CURRENT_CONTEXT(ctx);<br>
+   gen_vertex_arrays(ctx, n, arrays, true, "glCreateVertexArrays");<br>
 }<br>
<br>
<br>
diff --git a/src/mesa/main/arrayobj.h b/src/mesa/main/arrayobj.h<br>
index 3c1f918..ae671e3 100644<br>
--- a/src/mesa/main/arrayobj.h<br>
+++ b/src/mesa/main/arrayobj.h<br>
@@ -93,6 +93,8 @@ void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays);<br>
<br>
 void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer);<br>
<br>
+void GLAPIENTRY _mesa_CreateVertexArrays(GLsizei n, GLuint *arrays);<br>
+<br>
 GLboolean GLAPIENTRY _mesa_IsVertexArray( GLuint id );<br>
<br>
 #endif /* ARRAYOBJ_H */<br>
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp<br>
index 59ebb21..cc6b505 100644<br>
--- a/src/mesa/main/tests/dispatch_sanity.cpp<br>
+++ b/src/mesa/main/tests/dispatch_sanity.cpp<br>
@@ -970,6 +970,7 @@ const struct function gl_core_functions_possible[] = {<br>
    { "glTextureStorage3DMultisample", 45, -1 },<br>
    { "glTextureBuffer", 45, -1 },<br>
    { "glTextureBufferRange", 45, -1 },<br>
+   { "glCreateVertexArrays", 45, -1 },<br>
<br>
    /* GL_EXT_polygon_offset_clamp */<br>
    { "glPolygonOffsetClampEXT", 11, -1 },<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.5.3<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>