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

2015-06-09 Thread Ian Romanick
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

2015-05-27 Thread Kevin Rogovin
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