[Mesa-dev] [PATCH] mesa: use _mesa_is_user_fbo() and _mesa_is_winsys_fbo() functions

Jose Fonseca jfonseca at vmware.com
Thu Jan 12 08:38:45 PST 2012


Looks good to me.
Jose

----- Original Message -----
> Rather than testing the fbo's name against zero.
> ---
>  src/mesa/main/buffers.c      |   13 ++++++-----
>  src/mesa/main/fbobject.c     |   47
>  ++++++++++++-----------------------------
>  src/mesa/main/fbobject.h     |   22 +++++++++++++++++++
>  src/mesa/main/framebuffer.c  |    8 +++---
>  src/mesa/main/renderbuffer.c |    2 +-
>  src/mesa/main/teximage.c     |    6 ++--
>  src/mesa/main/texobj.c       |    2 +-
>  7 files changed, 52 insertions(+), 48 deletions(-)
> 
> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
> index 602dd32..216b6ee 100644
> --- a/src/mesa/main/buffers.c
> +++ b/src/mesa/main/buffers.c
> @@ -35,6 +35,7 @@
>  #include "colormac.h"
>  #include "context.h"
>  #include "enums.h"
> +#include "fbobject.h"
>  #include "mtypes.h"
>  
>  
> @@ -56,7 +57,7 @@ supported_buffer_bitmask(const struct gl_context
> *ctx,
>  {
>     GLbitfield mask = 0x0;
>  
> -   if (fb->Name > 0) {
> +   if (_mesa_is_user_fbo(fb)) {
>        /* A user-created renderbuffer */
>        GLuint i;
>        ASSERT(ctx->Extensions.EXT_framebuffer_object);
> @@ -357,7 +358,7 @@ updated_drawbuffers(struct gl_context *ctx)
>        struct gl_framebuffer *fb = ctx->DrawBuffer;
>  
>        /* Flag the FBO as requiring validation. */
> -      if (fb->Name != 0) {
> +      if (_mesa_is_user_fbo(fb)) {
>  	 fb->_Status = 0;
>        }
>     }
> @@ -452,7 +453,7 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint
> n, const GLenum *buffers,
>        fb->ColorDrawBuffer[buf] = GL_NONE;
>     }
>  
> -   if (fb->Name == 0) {
> +   if (_mesa_is_winsys_fbo(fb)) {
>        /* also set context drawbuffer state */
>        for (buf = 0; buf < ctx->Const.MaxDrawBuffers; buf++) {
>           if (ctx->Color.DrawBuffer[buf] != fb->ColorDrawBuffer[buf])
>           {
> @@ -476,7 +477,7 @@ _mesa_update_draw_buffers(struct gl_context *ctx)
>     GLuint i;
>  
>     /* should be a window system FBO */
> -   assert(ctx->DrawBuffer->Name == 0);
> +   assert(_mesa_is_winsys_fbo(ctx->DrawBuffer));
>  
>     for (i = 0; i < ctx->Const.MaxDrawBuffers; i++)
>        buffers[i] = ctx->Color.DrawBuffer[i];
> @@ -497,7 +498,7 @@ _mesa_readbuffer(struct gl_context *ctx, GLenum
> buffer, GLint bufferIndex)
>  {
>     struct gl_framebuffer *fb = ctx->ReadBuffer;
>  
> -   if (fb->Name == 0) {
> +   if (_mesa_is_winsys_fbo(fb)) {
>        /* Only update the per-context READ_BUFFER state if we're
>        bound to
>         * a window-system framebuffer.
>         */
> @@ -533,7 +534,7 @@ _mesa_ReadBuffer(GLenum buffer)
>     if (MESA_VERBOSE & VERBOSE_API)
>        _mesa_debug(ctx, "glReadBuffer %s\n",
>        _mesa_lookup_enum_by_nr(buffer));
>  
> -   if (fb->Name > 0 && buffer == GL_NONE) {
> +   if (_mesa_is_user_fbo(fb) && buffer == GL_NONE) {
>        /* This is legal for user-created framebuffer objects */
>        srcBuffer = -1;
>     }
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index aefcaf3..de94da6 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -79,26 +79,6 @@ static struct gl_renderbuffer DummyRenderbuffer;
>  static struct gl_framebuffer IncompleteFramebuffer;
>  
>  
> -/**
> - * Is the given FBO a user-created FBO?
> - */
> -static inline GLboolean
> -is_user_fbo(const struct gl_framebuffer *fb)
> -{
> -   return fb->Name != 0;
> -}
> -
> -
> -/**
> - * Is the given FBO a window system FBO (like an X window)?
> - */
> -static inline GLboolean
> -is_winsys_fbo(const struct gl_framebuffer *fb)
> -{
> -   return fb->Name == 0;
> -}
> -
> -
>  static void
>  delete_dummy_renderbuffer(struct gl_renderbuffer *rb)
>  {
> @@ -214,7 +194,7 @@ _mesa_get_attachment(struct gl_context *ctx,
> struct gl_framebuffer *fb,
>  {
>     GLuint i;
>  
> -   assert(is_user_fbo(fb));
> +   assert(_mesa_is_user_fbo(fb));
>  
>     switch (attachment) {
>     case GL_COLOR_ATTACHMENT0_EXT:
> @@ -265,7 +245,7 @@ static struct gl_renderbuffer_attachment *
>  _mesa_get_fb0_attachment(struct gl_context *ctx, struct
>  gl_framebuffer *fb,
>                           GLenum attachment)
>  {
> -   assert(is_winsys_fbo(fb));
> +   assert(_mesa_is_winsys_fbo(fb));
>  
>     switch (attachment) {
>     case GL_FRONT_LEFT:
> @@ -711,7 +691,7 @@ _mesa_test_framebuffer_completeness(struct
> gl_context *ctx,
>     GLint i;
>     GLuint j;
>  
> -   assert(is_user_fbo(fb));
> +   assert(_mesa_is_user_fbo(fb));
>  
>     numImages = 0;
>     fb->Width = 0;
> @@ -1009,10 +989,10 @@ _mesa_DeleteRenderbuffersEXT(GLsizei n, const
> GLuint *renderbuffers)
>                 _mesa_BindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
>              }
>  
> -            if (is_user_fbo(ctx->DrawBuffer)) {
> +            if (_mesa_is_user_fbo(ctx->DrawBuffer)) {
>                 detach_renderbuffer(ctx, ctx->DrawBuffer, rb);
>              }
> -            if (is_user_fbo(ctx->ReadBuffer)
> +            if (_mesa_is_user_fbo(ctx->ReadBuffer)
>                  && ctx->ReadBuffer != ctx->DrawBuffer) {
>                 detach_renderbuffer(ctx, ctx->ReadBuffer, rb);
>              }
> @@ -1318,7 +1298,7 @@ invalidate_rb(GLuint key, void *data, void
> *userData)
>     struct gl_renderbuffer *rb = (struct gl_renderbuffer *) userData;
>  
>     /* If this is a user-created FBO */
> -   if (is_user_fbo(fb)) {
> +   if (_mesa_is_user_fbo(fb)) {
>        GLuint i;
>        for (i = 0; i < BUFFER_COUNT; i++) {
>           struct gl_renderbuffer_attachment *att = fb->Attachment +
>           i;
> @@ -1609,7 +1589,7 @@ check_begin_texture_render(struct gl_context
> *ctx, struct gl_framebuffer *fb)
>     GLuint i;
>     ASSERT(ctx->Driver.RenderTexture);
>  
> -   if (is_winsys_fbo(fb))
> +   if (_mesa_is_winsys_fbo(fb))
>        return; /* can't render to texture with winsys framebuffers */
>  
>     for (i = 0; i < BUFFER_COUNT; i++) {
> @@ -1629,7 +1609,7 @@ check_begin_texture_render(struct gl_context
> *ctx, struct gl_framebuffer *fb)
>  static void
>  check_end_texture_render(struct gl_context *ctx, struct
>  gl_framebuffer *fb)
>  {
> -   if (is_winsys_fbo(fb))
> +   if (_mesa_is_winsys_fbo(fb))
>        return; /* can't render to texture with winsys framebuffers */
>  
>     if (ctx->Driver.FinishRenderTexture) {
> @@ -1882,7 +1862,7 @@ _mesa_CheckFramebufferStatusEXT(GLenum target)
>        return 0;
>     }
>  
> -   if (is_winsys_fbo(buffer)) {
> +   if (_mesa_is_winsys_fbo(buffer)) {
>        /* The window system / default framebuffer is always complete
>        */
>        return GL_FRAMEBUFFER_COMPLETE_EXT;
>     }
> @@ -1944,7 +1924,7 @@ framebuffer_texture(struct gl_context *ctx,
> const char *caller, GLenum target,
>     }
>  
>     /* check framebuffer binding */
> -   if (is_winsys_fbo(fb)) {
> +   if (_mesa_is_winsys_fbo(fb)) {
>        _mesa_error(ctx, GL_INVALID_OPERATION,
>                    "glFramebufferTexture%sEXT", caller);
>        return;
> @@ -2204,7 +2184,7 @@ _mesa_FramebufferRenderbufferEXT(GLenum target,
> GLenum attachment,
>        return;
>     }
>  
> -   if (is_winsys_fbo(fb)) {
> +   if (_mesa_is_winsys_fbo(fb)) {
>        /* Can't attach new renderbuffers to a window system
>        framebuffer */
>        _mesa_error(ctx, GL_INVALID_OPERATION,
>        "glFramebufferRenderbufferEXT");
>        return;
> @@ -2285,7 +2265,7 @@
> _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum
> attachment,
>        return;
>     }
>  
> -   if (is_winsys_fbo(buffer)) {
> +   if (_mesa_is_winsys_fbo(buffer)) {
>        /* Page 126 (page 136 of the PDF) of the OpenGL ES 2.0.25 spec
>         * says:
>         *
> @@ -2332,7 +2312,8 @@
> _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum
> attachment,
>  
>     switch (pname) {
>     case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT:
> -      *params = is_winsys_fbo(buffer) ? GL_FRAMEBUFFER_DEFAULT :
> att->Type;
> +      *params = _mesa_is_winsys_fbo(buffer)
> +         ? GL_FRAMEBUFFER_DEFAULT : att->Type;
>        return;
>     case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT:
>        if (att->Type == GL_RENDERBUFFER_EXT) {
> diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
> index 0a70a43..3aee842 100644
> --- a/src/mesa/main/fbobject.h
> +++ b/src/mesa/main/fbobject.h
> @@ -32,6 +32,28 @@
>  struct gl_context;
>  struct gl_texture_object;
>  
> +
> +/**
> + * Is the given FBO a user-created FBO?
> + */
> +static inline GLboolean
> +_mesa_is_user_fbo(const struct gl_framebuffer *fb)
> +{
> +   return fb->Name != 0;
> +}
> +
> +
> +/**
> + * Is the given FBO a window system FBO (like an X window)?
> + */
> +static inline GLboolean
> +_mesa_is_winsys_fbo(const struct gl_framebuffer *fb)
> +{
> +   return fb->Name == 0;
> +}
> +
> +
> +
>  extern void
>  _mesa_init_fbobjects(struct gl_context *ctx);
>  
> diff --git a/src/mesa/main/framebuffer.c
> b/src/mesa/main/framebuffer.c
> index 3ce3955..7c3c4e3 100644
> --- a/src/mesa/main/framebuffer.c
> +++ b/src/mesa/main/framebuffer.c
> @@ -281,8 +281,8 @@ _mesa_resize_framebuffer(struct gl_context *ctx,
> struct gl_framebuffer *fb,
>      * and return early.
>      */
>  
> -   /* For window system framebuffers, Name is zero */
> -   assert(fb->Name == 0);
> +   /* Can only resize win-sys framebuffer objects */
> +   assert(_mesa_is_winsys_fbo(fb));
>  
>     for (i = 0; i < BUFFER_COUNT; i++) {
>        struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
> @@ -408,7 +408,7 @@ update_framebuffer_size(struct gl_context *ctx,
> struct gl_framebuffer *fb)
>     GLuint i;
>  
>     /* user-created framebuffers only */
> -   assert(fb->Name);
> +   assert(_mesa_is_user_fbo(fb));
>  
>     for (i = 0; i < BUFFER_COUNT; i++) {
>        struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
> @@ -687,7 +687,7 @@ update_color_read_buffer(struct gl_context *ctx,
> struct gl_framebuffer *fb)
>  static void
>  update_framebuffer(struct gl_context *ctx, struct gl_framebuffer
>  *fb)
>  {
> -   if (fb->Name == 0) {
> +   if (_mesa_is_winsys_fbo(fb)) {
>        /* This is a window-system framebuffer */
>        /* Need to update the FB's GL_DRAW_BUFFER state to match the
>         * context state (GL_READ_BUFFER too).
> diff --git a/src/mesa/main/renderbuffer.c
> b/src/mesa/main/renderbuffer.c
> index bb8f46d..08e6946 100644
> --- a/src/mesa/main/renderbuffer.c
> +++ b/src/mesa/main/renderbuffer.c
> @@ -132,7 +132,7 @@ _mesa_add_renderbuffer(struct gl_framebuffer *fb,
>            fb->Attachment[bufferName].Renderbuffer == NULL);
>  
>     /* winsys vs. user-created buffer cross check */
> -   if (fb->Name) {
> +   if (_mesa_is_user_fbo(fb)) {
>        assert(rb->Name);
>     }
>     else {
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index 9475e84..ce62248 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -1900,7 +1900,7 @@ copytexture_error_check( struct gl_context
> *ctx, GLuint dimensions,
>     }
>  
>     /* Check that the source buffer is complete */
> -   if (ctx->ReadBuffer->Name) {
> +   if (_mesa_is_user_fbo(ctx->ReadBuffer)) {
>        if (ctx->ReadBuffer->_Status == 0) {
>           _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
>        }
> @@ -1999,7 +1999,7 @@ copytexsubimage_error_check1( struct gl_context
> *ctx, GLuint dimensions,
>                                GLenum target, GLint level)
>  {
>     /* Check that the source buffer is complete */
> -   if (ctx->ReadBuffer->Name) {
> +   if (_mesa_is_user_fbo(ctx->ReadBuffer)) {
>        if (ctx->ReadBuffer->_Status == 0) {
>           _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
>        }
> @@ -2179,7 +2179,7 @@ check_rtt_cb(GLuint key, void *data, void
> *userData)
>     const GLuint level = info->level, face = info->face;
>  
>     /* If this is a user-created FBO */
> -   if (fb->Name) {
> +   if (_mesa_is_user_fbo(fb)) {
>        GLuint i;
>        /* check if any of the FBO's attachments point to 'texObj' */
>        for (i = 0; i < BUFFER_COUNT; i++) {
> diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
> index dc6e309..1b61d3a 100644
> --- a/src/mesa/main/texobj.c
> +++ b/src/mesa/main/texobj.c
> @@ -893,7 +893,7 @@ unbind_texobj_from_fbo(struct gl_context *ctx,
>  
>     for (i = 0; i < n; i++) {
>        struct gl_framebuffer *fb = (i == 0) ? ctx->DrawBuffer :
>        ctx->ReadBuffer;
> -      if (fb->Name) {
> +      if (_mesa_is_user_fbo(fb)) {
>           GLuint j;
>           for (j = 0; j < BUFFER_COUNT; j++) {
>              if (fb->Attachment[j].Type == GL_TEXTURE &&
> --
> 1.7.3.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list