diff options
author | Fredrik Höglund <[email protected]> | 2015-03-02 18:22:50 +0100 |
---|---|---|
committer | Fredrik Höglund <[email protected]> | 2015-05-08 15:31:02 +0200 |
commit | a1f48268b4ee166eb9fde21bceaaef12a6e0c89a (patch) | |
tree | 5d01068e1acff449f0c4b3b855f5124e3f7b0172 /src | |
parent | e51bad669a4c42845c44a925bbb5d8885799c28f (diff) |
mesa: Implement CreateVertexArrays
v2: Update the documentation for gen_vertex_arrays().
Reviewed-by: Laura Ekstrand <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 | ||||
-rw-r--r-- | src/mesa/main/arrayobj.c | 36 | ||||
-rw-r--r-- | src/mesa/main/arrayobj.h | 2 | ||||
-rw-r--r-- | src/mesa/main/tests/dispatch_sanity.cpp | 1 |
4 files changed, 38 insertions, 8 deletions
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 8a092d69747..26328e98f5a 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -448,6 +448,13 @@ <param name="params" type="GLint *" /> </function> + <!-- Vertex Array object functions --> + + <function name="CreateVertexArrays" offset="assign"> + <param name="n" type="GLsizei" /> + <param name="arrays" type="GLuint *" /> + </function> + <!-- Sampler object functions --> <function name="CreateSamplers" offset="assign"> diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c index 8147f6a3c7e..ea56154f1ca 100644 --- a/src/mesa/main/arrayobj.c +++ b/src/mesa/main/arrayobj.c @@ -481,19 +481,23 @@ _mesa_DeleteVertexArrays(GLsizei n, const GLuint *ids) /** * Generate a set of unique array object IDs and store them in \c arrays. - * Helper for _mesa_GenVertexArrays[APPLE]() functions below. + * Helper for _mesa_GenVertexArrays[APPLE]() and _mesa_CreateVertexArrays() + * below. + * * \param n Number of IDs to generate. * \param arrays Array of \c n locations to store the IDs. - * \param vboOnly Will arrays have to reside in VBOs? + * \param create Indicates that the objects should also be created. + * \param func The name of the GL entry point. */ static void -gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays) +gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays, + bool create, const char *func) { GLuint first; GLint i; if (n < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glGenVertexArrays"); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", func); return; } @@ -503,16 +507,20 @@ gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays) first = _mesa_HashFindFreeKeyBlock(ctx->Array.Objects, n); - /* Allocate new, empty array objects and return identifiers */ + /* For the sake of simplicity we create the array objects in both + * the Gen* and Create* cases. The only difference is the value of + * EverBound, which is set to true in the Create* case. + */ for (i = 0; i < n; i++) { struct gl_vertex_array_object *obj; GLuint name = first + i; obj = (*ctx->Driver.NewArrayObject)( ctx, name ); if (!obj) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArrays"); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func); return; } + obj->EverBound = create; save_array_object(ctx, obj); arrays[i] = first + i; } @@ -527,7 +535,7 @@ void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays) { GET_CURRENT_CONTEXT(ctx); - gen_vertex_arrays(ctx, n, arrays); + gen_vertex_arrays(ctx, n, arrays, false, "glGenVertexArrays"); } @@ -539,7 +547,19 @@ void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays) { GET_CURRENT_CONTEXT(ctx); - gen_vertex_arrays(ctx, n, arrays); + gen_vertex_arrays(ctx, n, arrays, false, "glGenVertexArraysAPPLE"); +} + + +/** + * ARB_direct_state_access + * Generates ID's and creates the array objects. + */ +void GLAPIENTRY +_mesa_CreateVertexArrays(GLsizei n, GLuint *arrays) +{ + GET_CURRENT_CONTEXT(ctx); + gen_vertex_arrays(ctx, n, arrays, true, "glCreateVertexArrays"); } diff --git a/src/mesa/main/arrayobj.h b/src/mesa/main/arrayobj.h index 3c1f91835c5..ae671e3afcf 100644 --- a/src/mesa/main/arrayobj.h +++ b/src/mesa/main/arrayobj.h @@ -93,6 +93,8 @@ void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays); void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer); +void GLAPIENTRY _mesa_CreateVertexArrays(GLsizei n, GLuint *arrays); + GLboolean GLAPIENTRY _mesa_IsVertexArray( GLuint id ); #endif /* ARRAYOBJ_H */ diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 2d38b186a7b..a4a0644937e 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -1017,6 +1017,7 @@ const struct function gl_core_functions_possible[] = { { "glTextureStorage3DMultisample", 45, -1 }, { "glTextureBuffer", 45, -1 }, { "glTextureBufferRange", 45, -1 }, + { "glCreateVertexArrays", 45, -1 }, { "glCreateSamplers", 45, -1 }, { "glCreateProgramPipelines", 45, -1 }, { "glCreateQueries", 45, -1 }, |