Re: [Mesa-dev] [v4 PATCH 01/10] mesa: Define infrastructure for ARB_framebuffer_no_attachments
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.rogo...@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.roman...@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
[Mesa-dev] [v4 PATCH 01/10] mesa: Define infrastructure for ARB_framebuffer_no_attachments
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.rogo...@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; /* 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