[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