[Mesa-dev] [PATCH 01/21] mesa: add vertex_array_vertex_buffers_err() helper

Timothy Arceri tarceri at itsqueeze.com
Sun Jun 4 21:37:02 UTC 2017


You should probably at least mention you are adding no_error support to 
vertex_array_vertex_buffers() which will be used in a following patch in 
the commit message.

With that:

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

On 01/06/17 23:04, Samuel Pitoiset wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>   src/mesa/main/varray.c | 108 ++++++++++++++++++++++++++++---------------------
>   1 file changed, 61 insertions(+), 47 deletions(-)
> 
> diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
> index 47528ba2a7..c2c771c173 100644
> --- a/src/mesa/main/varray.c
> +++ b/src/mesa/main/varray.c
> @@ -2117,29 +2117,14 @@ _mesa_VertexArrayVertexBuffer(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
>   }
>   
>   
> -static void
> +static ALWAYS_INLINE void
>   vertex_array_vertex_buffers(struct gl_context *ctx,
>                               struct gl_vertex_array_object *vao,
>                               GLuint first, GLsizei count, const GLuint *buffers,
>                               const GLintptr *offsets, const GLsizei *strides,
> -                            const char *func)
> +                            bool no_error, const char *func)
>   {
> -   GLuint i;
> -
> -   ASSERT_OUTSIDE_BEGIN_END(ctx);
> -
> -   /* The ARB_multi_bind spec says:
> -    *
> -    *    "An INVALID_OPERATION error is generated if <first> + <count>
> -    *     is greater than the value of MAX_VERTEX_ATTRIB_BINDINGS."
> -    */
> -   if (first + count > ctx->Const.MaxVertexAttribBindings) {
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "%s(first=%u + count=%d > the value of "
> -                  "GL_MAX_VERTEX_ATTRIB_BINDINGS=%u)",
> -                  func, first, count, ctx->Const.MaxVertexAttribBindings);
> -      return;
> -   }
> +   GLint i;
>   
>      if (!buffers) {
>         /**
> @@ -2184,31 +2169,33 @@ vertex_array_vertex_buffers(struct gl_context *ctx,
>      for (i = 0; i < count; i++) {
>         struct gl_buffer_object *vbo;
>   
> -      /* The ARB_multi_bind spec says:
> -       *
> -       *    "An INVALID_VALUE error is generated if any value in
> -       *     <offsets> or <strides> is negative (per binding)."
> -       */
> -      if (offsets[i] < 0) {
> -         _mesa_error(ctx, GL_INVALID_VALUE,
> -                     "%s(offsets[%u]=%" PRId64 " < 0)",
> -                     func, i, (int64_t) offsets[i]);
> -         continue;
> -      }
> +      if (!no_error) {
> +         /* The ARB_multi_bind spec says:
> +          *
> +          *    "An INVALID_VALUE error is generated if any value in
> +          *     <offsets> or <strides> is negative (per binding)."
> +          */
> +         if (offsets[i] < 0) {
> +            _mesa_error(ctx, GL_INVALID_VALUE,
> +                        "%s(offsets[%u]=%" PRId64 " < 0)",
> +                        func, i, (int64_t) offsets[i]);
> +            continue;
> +         }
>   
> -      if (strides[i] < 0) {
> -         _mesa_error(ctx, GL_INVALID_VALUE,
> -                     "%s(strides[%u]=%d < 0)",
> -                     func, i, strides[i]);
> -         continue;
> -      }
> +         if (strides[i] < 0) {
> +            _mesa_error(ctx, GL_INVALID_VALUE,
> +                        "%s(strides[%u]=%d < 0)",
> +                        func, i, strides[i]);
> +            continue;
> +         }
>   
> -      if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
> -          strides[i] > ctx->Const.MaxVertexAttribStride) {
> -         _mesa_error(ctx, GL_INVALID_VALUE,
> -                     "%s(strides[%u]=%d > "
> -                     "GL_MAX_VERTEX_ATTRIB_STRIDE)", func, i, strides[i]);
> -         continue;
> +         if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
> +             strides[i] > ctx->Const.MaxVertexAttribStride) {
> +            _mesa_error(ctx, GL_INVALID_VALUE,
> +                        "%s(strides[%u]=%d > "
> +                        "GL_MAX_VERTEX_ATTRIB_STRIDE)", func, i, strides[i]);
> +            continue;
> +         }
>         }
>   
>         if (buffers[i]) {
> @@ -2234,6 +2221,33 @@ vertex_array_vertex_buffers(struct gl_context *ctx,
>   }
>   
>   
> +static void
> +vertex_array_vertex_buffers_err(struct gl_context *ctx,
> +                                struct gl_vertex_array_object *vao,
> +                                GLuint first, GLsizei count,
> +                                const GLuint *buffers, const GLintptr *offsets,
> +                                const GLsizei *strides, const char *func)
> +{
> +   ASSERT_OUTSIDE_BEGIN_END(ctx);
> +
> +   /* The ARB_multi_bind spec says:
> +    *
> +    *    "An INVALID_OPERATION error is generated if <first> + <count>
> +    *     is greater than the value of MAX_VERTEX_ATTRIB_BINDINGS."
> +    */
> +   if (first + count > ctx->Const.MaxVertexAttribBindings) {
> +      _mesa_error(ctx, GL_INVALID_OPERATION,
> +                  "%s(first=%u + count=%d > the value of "
> +                  "GL_MAX_VERTEX_ATTRIB_BINDINGS=%u)",
> +                  func, first, count, ctx->Const.MaxVertexAttribBindings);
> +      return;
> +   }
> +
> +   vertex_array_vertex_buffers(ctx, vao, first, count, buffers, offsets,
> +                               strides, false, func);
> +}
> +
> +
>   void GLAPIENTRY
>   _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers,
>                           const GLintptr *offsets, const GLsizei *strides)
> @@ -2252,9 +2266,9 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers,
>         return;
>      }
>   
> -   vertex_array_vertex_buffers(ctx, ctx->Array.VAO, first, count,
> -                               buffers, offsets, strides,
> -                               "glBindVertexBuffers");
> +   vertex_array_vertex_buffers_err(ctx, ctx->Array.VAO, first, count,
> +                                   buffers, offsets, strides,
> +                                   "glBindVertexBuffers");
>   }
>   
>   
> @@ -2276,9 +2290,9 @@ _mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count,
>      if (!vao)
>         return;
>   
> -   vertex_array_vertex_buffers(ctx, vao, first, count,
> -                               buffers, offsets, strides,
> -                               "glVertexArrayVertexBuffers");
> +   vertex_array_vertex_buffers_err(ctx, vao, first, count,
> +                                   buffers, offsets, strides,
> +                                   "glVertexArrayVertexBuffers");
>   }
>   
>   
> 


More information about the mesa-dev mailing list