[Mesa-dev] [PATCH 1/2] mesa: enable EXT_framebuffer_object in core profile

Marek Olšák maraeo at gmail.com
Tue Sep 18 02:13:29 UTC 2018


It seems like a good idea since EXT_framebuffer_blit/multisample are
also exposed.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Sat, Sep 8, 2018 at 12:20 AM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
> Since user defined names are not allowed in core profile
> we remove the allow_user_names bool and just check if
> we have a core profile like all other buffer/texture
> object handling code does.
>
> This extension is required by "Wolfenstein: The Old Blood"
> and is exposed in core in the Nvidia binary driver.
> ---
>  src/mapi/glapi/gen/EXT_framebuffer_object.xml |  4 +--
>  src/mesa/main/extensions_table.h              |  2 +-
>  src/mesa/main/fbobject.c                      | 30 ++++++++-----------
>  src/mesa/main/tests/dispatch_sanity.cpp       |  4 +--
>  4 files changed, 17 insertions(+), 23 deletions(-)
>
> diff --git a/src/mapi/glapi/gen/EXT_framebuffer_object.xml b/src/mapi/glapi/gen/EXT_framebuffer_object.xml
> index 310e8ee9569..6c0e54af1c9 100644
> --- a/src/mapi/glapi/gen/EXT_framebuffer_object.xml
> +++ b/src/mapi/glapi/gen/EXT_framebuffer_object.xml
> @@ -75,7 +75,7 @@
>         <return type="GLboolean"/>
>      </function>
>
> -    <function name="BindRenderbufferEXT" deprecated="3.1">
> +    <function name="BindRenderbufferEXT">
>          <param name="target" type="GLenum"/>
>          <param name="renderbuffer" type="GLuint"/>
>          <glx rop="4316"/>
> @@ -109,7 +109,7 @@
>         <return type="GLboolean"/>
>      </function>
>
> -    <function name="BindFramebufferEXT" deprecated="3.1">
> +    <function name="BindFramebufferEXT">
>          <param name="target" type="GLenum"/>
>          <param name="framebuffer" type="GLuint"/>
>          <glx rop="4319"/>
> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
> index 486d76a0580..09bf923bd0e 100644
> --- a/src/mesa/main/extensions_table.h
> +++ b/src/mesa/main/extensions_table.h
> @@ -230,7 +230,7 @@ EXT(EXT_frag_depth                          , dummy_true
>  EXT(EXT_framebuffer_blit                    , dummy_true                             , GLL, GLC,  x ,  x , 2005)
>  EXT(EXT_framebuffer_multisample             , EXT_framebuffer_multisample            , GLL, GLC,  x ,  x , 2005)
>  EXT(EXT_framebuffer_multisample_blit_scaled , EXT_framebuffer_multisample_blit_scaled, GLL, GLC,  x ,  x , 2011)
> -EXT(EXT_framebuffer_object                  , dummy_true                             , GLL,  x ,  x ,  x , 2000)
> +EXT(EXT_framebuffer_object                  , dummy_true                             , GLL, GLC,  x ,  x , 2000)
>  EXT(EXT_framebuffer_sRGB                    , EXT_framebuffer_sRGB                   , GLL, GLC,  x ,  x , 1998)
>  EXT(EXT_geometry_point_size                 , OES_geometry_shader                    ,  x ,  x ,  x ,  31, 2015)
>  EXT(EXT_geometry_shader                     , OES_geometry_shader                    ,  x ,  x ,  x ,  31, 2015)
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index edb86438e39..6dda4b5e523 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -1410,7 +1410,7 @@ allocate_renderbuffer_locked(struct gl_context *ctx, GLuint renderbuffer,
>
>
>  static void
> -bind_renderbuffer(GLenum target, GLuint renderbuffer, bool allow_user_names)
> +bind_renderbuffer(GLenum target, GLuint renderbuffer)
>  {
>     struct gl_renderbuffer *newRb;
>     GET_CURRENT_CONTEXT(ctx);
> @@ -1430,9 +1430,10 @@ bind_renderbuffer(GLenum target, GLuint renderbuffer, bool allow_user_names)
>           /* ID was reserved, but no real renderbuffer object made yet */
>           newRb = NULL;
>        }
> -      else if (!newRb && !allow_user_names) {
> +      else if (!newRb && ctx->API == API_OPENGL_CORE) {
>           /* All RB IDs must be Gen'd */
> -         _mesa_error(ctx, GL_INVALID_OPERATION, "glBindRenderbuffer(buffer)");
> +         _mesa_error(ctx, GL_INVALID_OPERATION,
> +                     "glBindRenderbuffer(non-gen name)");
>           return;
>        }
>
> @@ -1460,17 +1461,13 @@ _mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
>     /* OpenGL ES glBindRenderbuffer and glBindRenderbufferOES use this same
>      * entry point, but they allow the use of user-generated names.
>      */
> -   bind_renderbuffer(target, renderbuffer, _mesa_is_gles(ctx));
> +   bind_renderbuffer(target, renderbuffer);
>  }
>
>  void GLAPIENTRY
>  _mesa_BindRenderbufferEXT(GLenum target, GLuint renderbuffer)
>  {
> -   /* This function should not be in the dispatch table for core profile /
> -    * OpenGL 3.1, so execution should never get here in those cases -- no
> -    * need for an explicit test.
> -    */
> -   bind_renderbuffer(target, renderbuffer, true);
> +   bind_renderbuffer(target, renderbuffer);
>  }
>
>  /**
> @@ -2797,7 +2794,7 @@ check_end_texture_render(struct gl_context *ctx, struct gl_framebuffer *fb)
>
>
>  static void
> -bind_framebuffer(GLenum target, GLuint framebuffer, bool allow_user_names)
> +bind_framebuffer(GLenum target, GLuint framebuffer)
>  {
>     struct gl_framebuffer *newDrawFb, *newReadFb;
>     GLboolean bindReadBuf, bindDrawBuf;
> @@ -2828,9 +2825,10 @@ bind_framebuffer(GLenum target, GLuint framebuffer, bool allow_user_names)
>           /* ID was reserved, but no real framebuffer object made yet */
>           newDrawFb = NULL;
>        }
> -      else if (!newDrawFb && !allow_user_names) {
> +      else if (!newDrawFb && ctx->API == API_OPENGL_CORE) {
>           /* All FBO IDs must be Gen'd */
> -         _mesa_error(ctx, GL_INVALID_OPERATION, "glBindFramebuffer(buffer)");
> +         _mesa_error(ctx, GL_INVALID_OPERATION,
> +                     "glBindFramebuffer(non-gen name)");
>           return;
>        }
>
> @@ -2924,18 +2922,14 @@ _mesa_BindFramebuffer(GLenum target, GLuint framebuffer)
>     /* OpenGL ES glBindFramebuffer and glBindFramebufferOES use this same entry
>      * point, but they allow the use of user-generated names.
>      */
> -   bind_framebuffer(target, framebuffer, _mesa_is_gles(ctx));
> +   bind_framebuffer(target, framebuffer);
>  }
>
>
>  void GLAPIENTRY
>  _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer)
>  {
> -   /* This function should not be in the dispatch table for core profile /
> -    * OpenGL 3.1, so execution should never get here in those cases -- no
> -    * need for an explicit test.
> -    */
> -   bind_framebuffer(target, framebuffer, true);
> +   bind_framebuffer(target, framebuffer);
>  }
>
>
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> index 63c687c46fc..fb2acfbdeea 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -224,6 +224,8 @@ TEST_F(DispatchSanity_test, GLES31)
>  }
>
>  const struct function common_desktop_functions_possible[] = {
> +   { "glBindRenderbufferEXT", 10, -1 },
> +   { "glBindFramebufferEXT", 10, -1 },
>     { "glCullFace", 10, -1 },
>     { "glFrontFace", 10, -1 },
>     { "glHint", 10, -1 },
> @@ -1200,8 +1202,6 @@ const struct function common_desktop_functions_possible[] = {
>  };
>
>  const struct function gl_compatibility_functions_possible[] = {
> -   { "glBindRenderbufferEXT", 10, -1 },
> -   { "glBindFramebufferEXT", 10, -1 },
>     { "glNewList", 10, _gloffset_NewList },
>     { "glEndList", 10, _gloffset_EndList },
>     { "glCallList", 10, _gloffset_CallList },
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list