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

Ilia Mirkin imirkin at alum.mit.edu
Thu Jun 7 23:10:58 UTC 2018


It's slightly different than what you've specified, but can't you
achieve this with GL_ARB_clip_control / GL_EXT_clip_control ?

On Thu, Jun 7, 2018 at 7:01 PM, Fritz Koenig <frkoenig at google.com> 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.
> +
> +Overview
> +
> +    This extension adds the ability to specify that the internal framebuffer
> +    object is vertically flipped.
> +
> +IP Status
> +
> +    None
> +
> +Issues
> +
> +    None
> +
> +New Procedures and Functions
> +
> +    None
> +
> +New Types
> +
> +    None
> +
> +New Tokens
> +
> +    Accepted by the <pname> argument of FramebufferParameteri:
> +
> +        GL_FRAMEBUFFER_FLIP_Y_EXT                       0x8BBB
> +
> +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)
>  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