[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