[Mesa-dev] [PATCH 37/42] mesa: create read_buffer_err() and always inline read_buffer()

Timothy Arceri tarceri at itsqueeze.com
Wed Jun 28 01:26:11 UTC 2017


On 27/06/17 21:20, Samuel Pitoiset wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>   src/mesa/main/buffers.c | 46 +++++++++++++++++++++++++++++-----------------
>   1 file changed, 29 insertions(+), 17 deletions(-)
> 
> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
> index d85974afe60..dfee7a4421e 100644
> --- a/src/mesa/main/buffers.c
> +++ b/src/mesa/main/buffers.c
> @@ -738,11 +738,10 @@ _mesa_readbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
>    * renderbuffer for reading pixels.
>    * \param mode color buffer such as GL_FRONT, GL_BACK, etc.
>    */
> -static void
> +static ALWAYS_INLINE void
>   read_buffer(struct gl_context *ctx, struct gl_framebuffer *fb,
> -            GLenum buffer, const char *caller)
> +            GLenum buffer, const char *caller, bool no_error)
>   {
> -   GLbitfield supportedMask;
>      gl_buffer_index srcBuffer;
>   
>      FLUSH_VERTICES(ctx, 0);
> @@ -761,18 +760,23 @@ read_buffer(struct gl_context *ctx, struct gl_framebuffer *fb,
>         else
>            srcBuffer = read_buffer_enum_to_index(ctx, buffer);

You should also change the code above this from:

       if (_mesa_is_gles3(ctx) && !is_legal_es3_readbuffer_enum(buffer))
          srcBuffer = BUFFER_NONE;
       else

to:

       if (!no_error && _mesa_is_gles3(ctx) &&
           !is_legal_es3_readbuffer_enum(buffer))
          srcBuffer = BUFFER_NONE;
       else

With that patches 26-37 are:

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

>   
> -      if (srcBuffer == BUFFER_NONE) {
> -         _mesa_error(ctx, GL_INVALID_ENUM,
> -                     "%s(invalid buffer %s)", caller,
> -                     _mesa_enum_to_string(buffer));
> -         return;
> -      }
> -      supportedMask = supported_buffer_bitmask(ctx, fb);
> -      if (((1 << srcBuffer) & supportedMask) == 0) {
> -         _mesa_error(ctx, GL_INVALID_OPERATION,
> -                     "%s(invalid buffer %s)", caller,
> -                     _mesa_enum_to_string(buffer));
> -         return;
> +      if (!no_error) {
> +         GLbitfield supportedMask;
> +
> +         if (srcBuffer == BUFFER_NONE) {
> +            _mesa_error(ctx, GL_INVALID_ENUM,
> +                        "%s(invalid buffer %s)", caller,
> +                        _mesa_enum_to_string(buffer));
> +            return;
> +         }
> +
> +         supportedMask = supported_buffer_bitmask(ctx, fb);
> +         if (((1 << srcBuffer) & supportedMask) == 0) {
> +            _mesa_error(ctx, GL_INVALID_OPERATION,
> +                        "%s(invalid buffer %s)", caller,
> +                        _mesa_enum_to_string(buffer));
> +            return;
> +         }
>         }
>      }
>   
> @@ -788,11 +792,19 @@ read_buffer(struct gl_context *ctx, struct gl_framebuffer *fb,
>   }
>   
>   
> +static void
> +read_buffer_err(struct gl_context *ctx, struct gl_framebuffer *fb,
> +                GLenum buffer, const char *caller)
> +{
> +   read_buffer(ctx, fb, buffer, caller, false);
> +}
> +
> +
>   void GLAPIENTRY
>   _mesa_ReadBuffer(GLenum buffer)
>   {
>      GET_CURRENT_CONTEXT(ctx);
> -   read_buffer(ctx, ctx->ReadBuffer, buffer, "glReadBuffer");
> +   read_buffer_err(ctx, ctx->ReadBuffer, buffer, "glReadBuffer");
>   }
>   
>   
> @@ -811,5 +823,5 @@ _mesa_NamedFramebufferReadBuffer(GLuint framebuffer, GLenum src)
>      else
>         fb = ctx->WinSysReadBuffer;
>   
> -   read_buffer(ctx, fb, src, "glNamedFramebufferReadBuffer");
> +   read_buffer_err(ctx, fb, src, "glNamedFramebufferReadBuffer");
>   }
> 


More information about the mesa-dev mailing list