[Mesa-dev] [PATCH 21/22] mesa: Implement GetVertexArrayIndexed[64]iv
Laura Ekstrand
laura at jlekstrand.net
Fri Mar 20 15:41:24 PDT 2015
On Wed, Mar 18, 2015 at 4:18 PM, Fredrik Höglund <fredrik at kde.org> wrote:
> ---
> src/mapi/glapi/gen/ARB_direct_state_access.xml | 14 +++
> src/mesa/main/tests/dispatch_sanity.cpp | 2 +
> src/mesa/main/varray.c | 117
> +++++++++++++++++++++++++
> src/mesa/main/varray.h | 10 +++
> 4 files changed, 143 insertions(+)
>
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 35857d6..955cf8b 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -461,5 +461,19 @@
> <param name="param" type="GLint *" />
> </function>
>
> + <function name="GetVertexArrayIndexediv" offset="assign">
> + <param name="vaobj" type="GLuint" />
> + <param name="index" type="GLuint" />
> + <param name="pname" type="GLenum" />
> + <param name="param" type="GLint *" />
> + </function>
> +
> + <function name="GetVertexArrayIndexed64iv" offset="assign">
> + <param name="vaobj" type="GLuint" />
> + <param name="index" type="GLuint" />
> + <param name="pname" type="GLenum" />
> + <param name="param" type="GLint64 *" />
> + </function>
> +
> </category>
> </OpenGLAPI>
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp
> b/src/mesa/main/tests/dispatch_sanity.cpp
> index 83f8ecc..1ffd86d 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -982,6 +982,8 @@ const struct function gl_core_functions_possible[] = {
> { "glVertexArrayAttribBinding", 45, -1 },
> { "glVertexArrayBindingDivisor", 45, -1 },
> { "glGetVertexArrayiv", 45, -1 },
> + { "glGetVertexArrayIndexediv", 45, -1 },
> + { "glGetVertexArrayIndexed64iv", 45, -1 },
>
> /* GL_EXT_polygon_offset_clamp */
> { "glPolygonOffsetClampEXT", 11, -1 },
> diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
> index ec768f0..dccfc2f 100644
> --- a/src/mesa/main/varray.c
> +++ b/src/mesa/main/varray.c
> @@ -1051,6 +1051,123 @@ _mesa_GetVertexAttribPointerv(GLuint index, GLenum
> pname, GLvoid **pointer)
> }
>
>
> +/** ARB_direct_state_access */
> +void GLAPIENTRY
> +_mesa_GetVertexArrayIndexediv(GLuint vaobj, GLuint index,
> + GLenum pname, GLint *params)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> + struct gl_vertex_array_object *vao;
> +
> + /* The ARB_direct_state_access specification says:
> + *
> + * "An INVALID_OPERATION error is generated if <vaobj> is not
> + * [compatibility profile: zero or] the name of an existing
> + * vertex array object."
> + */
> + vao = _mesa_lookup_vao_err(ctx, vaobj, "glGetVertexArrayIndexediv");
> + if (!vao)
> + return;
> +
> + /* The ARB_direct_state_access specification says:
> + *
> + * "For GetVertexArrayIndexediv, <pname> must be one of
> + * VERTEX_ATTRIB_ARRAY_ENABLED, VERTEX_ATTRIB_ARRAY_SIZE,
> + * VERTEX_ATTRIB_ARRAY_STRIDE, VERTEX_ATTRIB_ARRAY_TYPE,
> + * VERTEX_ATTRIB_ARRAY_NORMALIZED, VERTEX_ATTRIB_ARRAY_INTEGER,
> + * VERTEX_ATTRIB_ARRAY_LONG, VERTEX_ATTRIB_ARRAY_DIVISOR, or
> + * VERTEX_ATTRIB_RELATIVE_OFFSET."
> + *
> + * and:
> + *
> + * "Add GetVertexArrayIndexediv in 'Get Command' for
> + * VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
> + * VERTEX_ATTRIB_BINDING,
> + * VERTEX_ATTRIB_RELATIVE_OFFSET,
> + * VERTEX_BINDING_OFFSET, and
> + * VERTEX_BINDING_STRIDE states"
> + *
> + * The only parameter name common to both lists is
> + * VERTEX_ATTRIB_RELATIVE_OFFSET. Also note that VERTEX_BINDING_BUFFER
> + * and VERTEX_BINDING_DIVISOR are missing from both lists. It seems
> + * pretty clear however that the intent is that it should be possible
> + * to query all vertex attrib and binding states that can be set with
> + * a DSA function.
> + */
> + switch (pname) {
> + case GL_VERTEX_BINDING_OFFSET:
> + params[0] = vao->VertexBinding[VERT_ATTRIB_GENERIC(index)].Offset;
> + break;
> + case GL_VERTEX_BINDING_STRIDE:
> + params[0] = vao->VertexBinding[VERT_ATTRIB_GENERIC(index)].Stride;
> + break;
> + case GL_VERTEX_BINDING_DIVISOR:
> + params[0] =
> vao->VertexBinding[VERT_ATTRIB_GENERIC(index)].InstanceDivisor;
> + break;
> + case GL_VERTEX_BINDING_BUFFER:
> + params[0] =
> vao->VertexBinding[VERT_ATTRIB_GENERIC(index)].BufferObj->Name;
> + break;
> + default:
> + params[0] = get_vertex_array_attrib(ctx, vao, index, pname,
> + "glGetVertexArrayIndexediv");
> + break;
> + }
> +}
> +
> +
> +void GLAPIENTRY
> +_mesa_GetVertexArrayIndexed64iv(GLuint vaobj, GLuint index,
> + GLenum pname, GLint64 *params)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> + struct gl_vertex_array_object *vao;
> +
> + /* The ARB_direct_state_access specification says:
> + *
> + * "An INVALID_OPERATION error is generated if <vaobj> is not
> + * [compatibility profile: zero or] the name of an existing
> + * vertex array object."
> + */
+ vao = _mesa_lookup_vao_err(ctx, vaobj, "glVertexArrayIndexed64iv");
>
You forgot "Get" in this string --^
> + if (!vao)
> + return;
> +
> + /* The ARB_direct_state_access specification says:
> + *
> + * "For GetVertexArrayIndexed64iv, <pname> must be
> + * VERTEX_BINDING_OFFSET."
> + *
> + * and:
> + *
> + * "An INVALID_ENUM error is generated if <pname> is not one of
> + * the valid values listed above for the corresponding command."
> + */
> + if (pname != GL_VERTEX_BINDING_OFFSET) {
> + _mesa_error(ctx, GL_INVALID_ENUM, "glVertexArrayIndexed64iv("
>
Again, you forgot "Get" --^
> + "pname != GL_VERTEX_BINDING_OFFSET)");
> + return;
> + }
> +
> + /* The ARB_direct_state_access specification says:
> + *
> + * "An INVALID_VALUE error is generated if <index> is greater than
> + * or equal to the value of MAX_VERTEX_ATTRIBS."
> + *
> + * Since the index refers to a buffer binding in this case, the
> intended
> + * limit must be MAX_VERTEX_ATTRIB_BINDINGS. Both limits are currently
> + * required to be the same, so in practice this doesn't matter.
> + */
> + if (index >= ctx->Const.MaxVertexAttribBindings) {
> + _mesa_error(ctx, GL_INVALID_VALUE, "glVertexArrayIndexed64iv("
>
Again you forgot "Get" ---^
> + "index %d >= the value of GL_MAX_VERTEX_ATTRIB_BINDINGS
> (%d))",
> + index, ctx->Const.MaxVertexAttribBindings);
> + return;
> + }
> +
> + params[0] = vao->VertexBinding[VERT_ATTRIB_GENERIC(index)].Offset;
> +}
> +
> +
> void GLAPIENTRY
> _mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
> GLsizei count, const GLvoid *ptr)
> diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
> index c369ba4..e218219 100644
> --- a/src/mesa/main/varray.h
> +++ b/src/mesa/main/varray.h
> @@ -208,6 +208,16 @@ extern void GLAPIENTRY
> _mesa_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid
> **pointer);
>
>
> +void GLAPIENTRY
> +_mesa_GetVertexArrayIndexediv(GLuint vaobj, GLuint index,
> + GLenum pname, GLint *param);
> +
> +
> +void GLAPIENTRY
> +_mesa_GetVertexArrayIndexed64iv(GLuint vaobj, GLuint index,
> + GLenum pname, GLint64 *param);
> +
> +
> extern void GLAPIENTRY
> _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid
> *pointer);
>
> --
> 1.8.5.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150320/164c2285/attachment-0001.html>
More information about the mesa-dev
mailing list