[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