[Mesa-dev] [PATCH 16/42] mesa: prepare create_buffers() helper for KHR_no_error support

Timothy Arceri tarceri at itsqueeze.com
Tue Jun 27 23:28:43 UTC 2017


On 27/06/17 21:20, Samuel Pitoiset wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>   src/mesa/main/bufferobj.c | 45 ++++++++++++++++++++++++++-------------------
>   1 file changed, 26 insertions(+), 19 deletions(-)
> 
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index 6e2979f6db9..e31fcc357da 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -1416,26 +1416,11 @@ _mesa_DeleteBuffers(GLsizei n, const GLuint *ids)
>    * driver internals.
>    */
>   static void
> -create_buffers(GLsizei n, GLuint *buffers, bool dsa)
> +create_buffers(struct gl_context *ctx, GLsizei n, GLuint *buffers, bool dsa)
>   {
> -   GET_CURRENT_CONTEXT(ctx);
>      GLuint first;
>      struct gl_buffer_object *buf;
>   
> -   const char *func = dsa ? "glCreateBuffers" : "glGenBuffers";
> -
> -   if (MESA_VERBOSE & VERBOSE_API)
> -      _mesa_debug(ctx, "%s(%d)\n", func, n);
> -
> -   if (n < 0) {
> -      _mesa_error(ctx, GL_INVALID_VALUE, "%s(n %d < 0)", func, n);
> -      return;
> -   }
> -
> -   if (!buffers) {
> -      return;
> -   }

Passing NULL buffers is not an error so we should leave this here. It 
should just return on a no error path also.

With that:

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

> -
>      /*
>       * This must be atomic (generation and allocation of buffer object IDs)
>       */
> @@ -1453,7 +1438,7 @@ create_buffers(GLsizei n, GLuint *buffers, bool dsa)
>            assert(ctx->Driver.NewBufferObject);
>            buf = ctx->Driver.NewBufferObject(ctx, buffers[i]);
>            if (!buf) {
> -            _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
> +            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCreateBuffers");
>               _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
>               return;
>            }
> @@ -1467,6 +1452,26 @@ create_buffers(GLsizei n, GLuint *buffers, bool dsa)
>      _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
>   }
>   
> +
> +static void
> +create_buffers_err(struct gl_context *ctx, GLsizei n, GLuint *buffers, bool dsa)
> +{
> +   const char *func = dsa ? "glCreateBuffers" : "glGenBuffers";
> +
> +   if (MESA_VERBOSE & VERBOSE_API)
> +      _mesa_debug(ctx, "%s(%d)\n", func, n);
> +
> +   if (n < 0) {
> +      _mesa_error(ctx, GL_INVALID_VALUE, "%s(n %d < 0)", func, n);
> +      return;
> +   }
> +
> +   if (!buffers)
> +      return;
> +
> +   create_buffers(ctx, n, buffers, dsa);
> +}
> +
>   /**
>    * Generate a set of unique buffer object IDs and store them in \c buffers.
>    *
> @@ -1476,7 +1481,8 @@ create_buffers(GLsizei n, GLuint *buffers, bool dsa)
>   void GLAPIENTRY
>   _mesa_GenBuffers(GLsizei n, GLuint *buffers)
>   {
> -   create_buffers(n, buffers, false);
> +   GET_CURRENT_CONTEXT(ctx);
> +   create_buffers_err(ctx, n, buffers, false);
>   }
>   
>   /**
> @@ -1488,7 +1494,8 @@ _mesa_GenBuffers(GLsizei n, GLuint *buffers)
>   void GLAPIENTRY
>   _mesa_CreateBuffers(GLsizei n, GLuint *buffers)
>   {
> -   create_buffers(n, buffers, true);
> +   GET_CURRENT_CONTEXT(ctx);
> +   create_buffers_err(ctx, n, buffers, true);
>   }
>   
>   
> 


More information about the mesa-dev mailing list