[Mesa-dev] [v4 PATCH 01/10] mesa: Define infrastructure for ARB_framebuffer_no_attachments

Ian Romanick idr at freedesktop.org
Tue Jun 9 15:03:50 PDT 2015


On 05/27/2015 02:49 AM, Kevin Rogovin wrote:
> Define the infrastructure for the extension GL_ARB_framebuffer_no_attachments:
>  - extension table
>  - additions to gl_framebuffer
> 
> v2:
>  Formatting fixes.
> 
> v3:
>  mtypes.h: Correct comment on _HasAttachments.
> 
> v4:
>  Formatting fixes.
>  mtypes.h: Clarify comments
>  
> 
> Signed-off-by: Kevin Rogovin <kevin.rogovin at intel.com>
> ---
>  src/mesa/main/extensions.c  |  1 +
>  src/mesa/main/fbobject.c    |  1 +
>  src/mesa/main/framebuffer.c |  1 +
>  src/mesa/main/mtypes.h      | 48 ++++++++++++++++++++++++++++++++++++++++-----
>  4 files changed, 46 insertions(+), 5 deletions(-)
> 
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index c82416a..3256b2c 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -117,6 +117,7 @@ static const struct extension extension_table[] = {
>     { "GL_ARB_fragment_program",                    o(ARB_fragment_program),                    GLL,            2002 },
>     { "GL_ARB_fragment_program_shadow",             o(ARB_fragment_program_shadow),             GLL,            2003 },
>     { "GL_ARB_fragment_shader",                     o(ARB_fragment_shader),                     GL,             2002 },
> +   { "GL_ARB_framebuffer_no_attachments",          o(ARB_framebuffer_no_attachments),          GL,             2012 },
>     { "GL_ARB_framebuffer_object",                  o(ARB_framebuffer_object),                  GL,             2005 },
>     { "GL_ARB_framebuffer_sRGB",                    o(EXT_framebuffer_sRGB),                    GL,             1998 },
>     { "GL_ARB_get_program_binary",                  o(dummy_true),                              GL,             2010 },
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 1859c27..8fea7f8 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -957,6 +957,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
>     fb->Height = 0;
>     fb->_AllColorBuffersFixedPoint = GL_TRUE;
>     fb->_HasSNormOrFloatColorBuffer = GL_FALSE;
> +   fb->_HasAttachments = GL_TRUE;

For things that are not directly accessible to the the GL API, we have
started avoiding the use of GL types.  In this case, you should use
bool, true, and false for _HasAttachments.  Since
DefaultGeometry::FixedSampleLocations is accessible to the GL API, it
should continue using GLboolean.

With that changed, this patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

>  
>     /* Start at -2 to more easily loop over all attachment points.
>      *  -2: depth buffer
> diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
> index 665a5ba..c2cfb92 100644
> --- a/src/mesa/main/framebuffer.c
> +++ b/src/mesa/main/framebuffer.c
> @@ -157,6 +157,7 @@ _mesa_initialize_window_framebuffer(struct gl_framebuffer *fb,
>     fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT;
>     fb->_AllColorBuffersFixedPoint = !visual->floatMode;
>     fb->_HasSNormOrFloatColorBuffer = visual->floatMode;
> +   fb->_HasAttachments = GL_TRUE;
>  
>     compute_depth_max(fb);
>  }
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 8342517..5abbc0a 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -3146,12 +3146,29 @@ struct gl_framebuffer
>      */
>     struct gl_config Visual;
>  
> -   GLuint Width, Height;	/**< size of frame buffer in pixels */
> +   /**
> +    * Size of frame buffer in pixels. If there are no attachments, then both
> +    * of these are 0.
> +    */
> +   GLuint Width, Height;
> +
> +   /**
> +    * In the case that the framebuffer has no attachment (i.e.
> +    * GL_ARB_framebuffer_no_attachments) then the geometry of
> +    * the framebuffer is specified by the default values.
> +    */
> +   struct {
> +     GLuint Width, Height, Layers, NumSamples;
> +     GLboolean FixedSampleLocations;
> +   } DefaultGeometry;
>  
> -   /** \name  Drawing bounds (Intersection of buffer size and scissor box) */
> +   /** \name  Drawing bounds (Intersection of buffer size and scissor box)
> +    * The drawing region is given by [_Xmin, _Xmax) x [_Ymin, _Ymax),
> +    * (inclusive for _Xmin and _Ymin while exclusive for _Xmax and _Ymax)
> +    */
>     /*@{*/
> -   GLint _Xmin, _Xmax;  /**< inclusive */
> -   GLint _Ymin, _Ymax;  /**< exclusive */
> +   GLint _Xmin, _Xmax;
> +   GLint _Ymin, _Ymax;
>     /*@}*/
>  
>     /** \name  Derived Z buffer stuff */
> @@ -3164,6 +3181,16 @@ struct gl_framebuffer
>     /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */
>     GLenum _Status;
>  
> +   /** Whether one of Attachment has Type != GL_NONE
> +    * NOTE: the values for Width and Height are set to 0 in case of having
> +    * no attachments, a backend driver supporting the extension
> +    * GL_ARB_framebuffer_no_attachments must check for the flag _HasAttachments
> +    * and if GL_FALSE, must then use the values in DefaultGeometry to initialize
> +    * its viewport, scissor and so on (in particular _Xmin, _Xmax, _Ymin and
> +    * _Ymax do NOT take into account _HasAttachments being false)
> +    */
> +   GLboolean _HasAttachments;
> +
>     /** Integer color values */
>     GLboolean _IntegerColor;
>  
> @@ -3174,7 +3201,9 @@ struct gl_framebuffer
>     /**
>      * The maximum number of layers in the framebuffer, or 0 if the framebuffer
>      * is not layered.  For cube maps and cube map arrays, each cube face
> -    * counts as a layer.
> +    * counts as a layer. As the case for Width, Height a backend driver
> +    * supporting GL_ARB_framebuffer_no_attachments must use DefaultGeometry
> +    * in the case that _HasAttachments is false
>      */
>     GLuint MaxNumLayers;
>  
> @@ -3353,6 +3382,14 @@ struct gl_constants
>     GLuint MaxRenderbufferSize;   /**< GL_EXT_framebuffer_object */
>     GLuint MaxSamples;            /**< GL_ARB_framebuffer_object */
>  
> +   /**
> +    * GL_ARB_framebuffer_no_attachments
> +    */
> +   GLuint MaxFramebufferWidth;
> +   GLuint MaxFramebufferHeight;
> +   GLuint MaxFramebufferLayers;
> +   GLuint MaxFramebufferSamples;
> +
>     /** Number of varying vectors between any two shader stages. */
>     GLuint MaxVarying;
>  
> @@ -3631,6 +3668,7 @@ struct gl_extensions
>     GLboolean ARB_fragment_program;
>     GLboolean ARB_fragment_program_shadow;
>     GLboolean ARB_fragment_shader;
> +   GLboolean ARB_framebuffer_no_attachments;
>     GLboolean ARB_framebuffer_object;
>     GLboolean ARB_explicit_attrib_location;
>     GLboolean ARB_explicit_uniform_location;
> 



More information about the mesa-dev mailing list