[Mesa-dev] [PATCH 1/2] mesa : MESA_framebuffer_flip_y extension

Fritz Koenig frkoenig at google.com
Fri Jun 15 22:10:46 UTC 2018


On Tue, Jun 12, 2018 at 12:28 PM Chad Versace <chadversary at chromium.org> wrote:
>
> On Thu 07 Jun 2018, Fritz Koenig wrote:
> > Adds an extension to glFramebufferParameteri
> > that will specify if the framebuffer is vertically
> > flipped. Historically system framebuffers are
> > vertically flipped and user framebuffers are not.
> > Checking to see the state was done by looking at
> > the name field.  This adds an explicit field.
> > ---
> >  docs/specs/MESA_framebuffer_flip_y.spec | 59 +++++++++++++++++++++++++
> >  include/GLES2/gl2ext.h                  |  5 +++
> >  src/mapi/glapi/registry/gl.xml          |  6 +++
> >  src/mesa/main/extensions_table.h        |  1 +
> >  src/mesa/main/fbobject.c                |  8 ++++
> >  src/mesa/main/framebuffer.c             |  1 +
> >  src/mesa/main/glheader.h                |  3 ++
> >  src/mesa/main/mtypes.h                  |  4 ++
> >  8 files changed, 87 insertions(+)
> >  create mode 100644 docs/specs/MESA_framebuffer_flip_y.spec
> >
> > diff --git a/docs/specs/MESA_framebuffer_flip_y.spec b/docs/specs/MESA_framebuffer_flip_y.spec
> > new file mode 100644
> > index 0000000000..b9867e0683
> > --- /dev/null
> > +++ b/docs/specs/MESA_framebuffer_flip_y.spec
> > @@ -0,0 +1,59 @@
> > +Name
> > +
> > +    MESA_framebuffer_flip_y
> > +
> > +Name Strings
> > +
> > +    GL_MESA_framebuffer_flip_y
> > +
> > +Contact
> > +
> > +    Fritz Koenig <frkoenig at google.com>
> > +
> > +Status
> > +
> > +    Proposal
> > +
> > +Version
> > +
> > +    Version 1, June 7, 2018
> > +
> > +Number
> > +
> > +    TBD
> > +
> > +Dependencies
> > +
> > +    OpenGLES 3.1 is required.
>
> In specs, s/OpenGLES/OpenGL ES/.
>
> > +
> > +Overview
> > +
> > +    This extension adds the ability to specify that the internal framebuffer
> > +    object is vertically flipped.
>
> Questions:
>
>   a. Is it legal to set and/or query GL_FRAMEBUFFER_FLIP_Y_MESA on the
>      default framebuffer (that is, the winsys framebuffer)?

no, this is for user framebuffers only, FramebufferParameteri can not
be called on a winsys framebuffer

>   b. If (a) is legal, then the default framebuffer's initial value of
>      GL_FRAMEBUFFER_FLIP_Y_MESA is ambiguous. Does the spec define it
>      to be GL_TRUE or GL_FALSE? (I assume the answer is GL_TRUE based on
>      the patch's code).
>
> The patch seems to allow toggling the state of winsys framebuffers,
> but I was unsure if that decision was intentional.
>
> > +New Tokens
> > +
> > +    Accepted by the <pname> argument of FramebufferParameteri:
> > +
> > +        GL_FRAMEBUFFER_FLIP_Y_EXT                       0x8BBB
>
> ... and GetFramebufferParameteriv.
>
> > +
> > +Revision History
> > +
> > +    Version 1, June, 2018
> > +        Initial draft (Fritz Koenig)
> > diff --git a/include/GLES2/gl2ext.h b/include/GLES2/gl2ext.h
> > index a7d19a1fc8..7fb5e9ca5f 100644
> > --- a/include/GLES2/gl2ext.h
> > +++ b/include/GLES2/gl2ext.h
> > @@ -2334,6 +2334,11 @@ GL_APICALL void GL_APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint quer
> >  #endif
> >  #endif /* GL_INTEL_performance_query */
> >
> > +#ifndef GL_MESA_framebuffer_flip_y
> > +#define GL_MESA_framebuffer_flip_y 1
> > +#define GL_FRAMEBUFFER_FLIP_Y_EXT         0x8BBB
> > +#endif /* GL_MESA_framebuffer_flip_y */
> > +
> >  #ifndef GL_MESA_program_binary_formats
> >  #define GL_MESA_program_binary_formats 1
> >  #define GL_PROGRAM_BINARY_FORMAT_MESA     0x875F
> > diff --git a/src/mapi/glapi/registry/gl.xml b/src/mapi/glapi/registry/gl.xml
> > index 833478aa51..3a3d4f3d81 100644
> > --- a/src/mapi/glapi/registry/gl.xml
> > +++ b/src/mapi/glapi/registry/gl.xml
> > @@ -6568,6 +6568,7 @@ typedef unsigned int GLhandleARB;
> >          <enum value="0x8BB5" name="GL_VERTEX_PROGRAM_CALLBACK_MESA"/>
> >          <enum value="0x8BB6" name="GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA"/>
> >          <enum value="0x8BB7" name="GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA"/>
> > +        <enum value="0x8BBB" name="GL_FRAMEBUFFER_FLIP_Y_EXT"/>
> >      </enums>
> >
> >      <enums namespace="GL" start="0x8BC0" end="0x8BFF" vendor="QCOM" comment="Reassigned from AMD to QCOM">
> > @@ -44356,6 +44357,11 @@ typedef unsigned int GLhandleARB;
> >                  <enum name="GL_TEXTURE_2D_STACK_BINDING_MESAX"/>
> >              </require>
> >          </extension>
> > +        <extension name="GL_MESA_framebuffer_flip_y" supported="gles2">
> > +            <require>
> > +                <enum name="GL_FRAMEBUFFER_FLIP_Y_EXT"/>
> > +            </require>
> > +        </extension>
> >          <extension name="GL_MESA_pack_invert" supported="gl">
> >              <require>
> >                  <enum name="GL_PACK_INVERT_MESA"/>
> > diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
> > index 79ef228b69..03a5c7b345 100644
> > --- a/src/mesa/main/extensions_table.h
> > +++ b/src/mesa/main/extensions_table.h
> > @@ -322,6 +322,7 @@ EXT(KHR_texture_compression_astc_hdr        , KHR_texture_compression_astc_hdr
> >  EXT(KHR_texture_compression_astc_ldr        , KHR_texture_compression_astc_ldr       , GLL, GLC,  x , ES2, 2012)
> >  EXT(KHR_texture_compression_astc_sliced_3d  , KHR_texture_compression_astc_sliced_3d , GLL, GLC,  x , ES2, 2015)
> >
> > +EXT(MESA_framebuffer_flip_y                 , MESA_framebuffer_flip_y                ,   x,   x,  x , ES2, 2018)
>
> Since the extension requires GLES 3.1, this row should have s/ES2/31/.
>

I don't see the option for an ES31 extension, only ES2 in that file.

> >  EXT(MESA_pack_invert                        , MESA_pack_invert                       , GLL, GLC,  x ,  x , 2002)
> >  EXT(MESA_shader_integer_functions           , MESA_shader_integer_functions          , GLL, GLC,  x ,  30, 2016)
> >  EXT(MESA_texture_signed_rgba                , EXT_texture_snorm                      , GLL, GLC,  x ,  x , 2009)
> > diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> > index a63e8b8de5..efa000ede7 100644
> > --- a/src/mesa/main/fbobject.c
> > +++ b/src/mesa/main/fbobject.c
> > @@ -1448,6 +1448,14 @@ framebuffer_parameteri(struct gl_context *ctx, struct gl_framebuffer *fb,
> >     case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
> >        fb->DefaultGeometry.FixedSampleLocations = param;
> >        break;
> > +   case GL_FRAMEBUFFER_FLIP_Y_EXT:
> > +      if (!ctx->Extensions.MESA_framebuffer_flip_y) {
> > +         _mesa_error(ctx, GL_INVALID_OPERATION,
> > +                  "%s(MESA_framebuffer_flip_y not implemented)", func);
> > +         break;
> > +      }
> > +      fb->InvertedY = param;
> > +      break;
> >     default:
> >        _mesa_error(ctx, GL_INVALID_ENUM,
> >                    "%s(pname=0x%x)", func, pname);
> > diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
> > index 8e751b453b..d0c51da1ef 100644
> > --- a/src/mesa/main/framebuffer.c
> > +++ b/src/mesa/main/framebuffer.c
> > @@ -159,6 +159,7 @@ _mesa_initialize_window_framebuffer(struct gl_framebuffer *fb,
> >     fb->_AllColorBuffersFixedPoint = !visual->floatMode;
> >     fb->_HasSNormOrFloatColorBuffer = visual->floatMode;
> >     fb->_HasAttachments = true;
> > +   fb->InvertedY = true;
> >
> >     compute_depth_max(fb);
> >  }
> > diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
> > index 16648820b1..e388fe5852 100644
> > --- a/src/mesa/main/glheader.h
> > +++ b/src/mesa/main/glheader.h
> > @@ -160,6 +160,9 @@ typedef void *GLeglImageOES;
> >  #define GL_HALF_FLOAT_OES                                       0x8D61
> >  #endif
> >
> > +#ifndef GL_MESA_framebuffer_flip_y
> > +#define GL_FRAMEBUFFER_FLIP_Y_EXT                               0x8BBB
> > +#endif
> >
> >  /**
> >   * Internal token to represent a GLSL shader program (a collection of
> > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> > index 482c42a4b2..5da449a7d9 100644
> > --- a/src/mesa/main/mtypes.h
> > +++ b/src/mesa/main/mtypes.h
> > @@ -3498,6 +3498,9 @@ struct gl_framebuffer
> >
> >     /** Delete this framebuffer */
> >     void (*Delete)(struct gl_framebuffer *fb);
> > +
> > +   /** Is the framebuffer vertically flipped */
> > +   GLboolean InvertedY;
> >  };
> >
> >
> > @@ -4230,6 +4233,7 @@ struct gl_extensions
> >     GLboolean KHR_texture_compression_astc_hdr;
> >     GLboolean KHR_texture_compression_astc_ldr;
> >     GLboolean KHR_texture_compression_astc_sliced_3d;
> > +   GLboolean MESA_framebuffer_flip_y;
> >     GLboolean MESA_tile_raster_order;
> >     GLboolean MESA_pack_invert;
> >     GLboolean EXT_shader_framebuffer_fetch;
> > --
> > 2.18.0.rc1.242.g61856ae69a-goog
> >
> > _______________________________________________
> > 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