[Mesa-dev] [PATCH 2/2] gles2: Add GL_NV_read_buffer extension

Kristian Høgsberg krh at bitplanet.net
Fri Jun 15 12:44:03 PDT 2012


This lets us select the front buffer for reading under GLES2.
---
 src/mapi/glapi/gen/es_EXT.xml  |    7 +++++++
 src/mapi/glapi/gen/gles_api.py |    2 ++
 src/mesa/main/APIspec.xml      |   13 +++++++++++++
 src/mesa/main/extensions.c     |    1 +
 src/mesa/main/get.c            |   20 +++++++++++++++++++-
 src/mesa/main/mtypes.h         |    1 +
 6 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml
index c7e7d07..b26cac5 100644
--- a/src/mapi/glapi/gen/es_EXT.xml
+++ b/src/mapi/glapi/gen/es_EXT.xml
@@ -627,4 +627,11 @@
     <enum name="REQUIRED_TEXTURE_IMAGE_UNITS_OES"         value="0x8D68"/>
 </category>
 
+<!-- 93. GL_NV_read_buffer -->
+<category name="NV_read_buffer">
+    <function name="ReadBufferNV" offset="assign">
+        <param name="mode" type="GLenum"/>
+    </function>
+</category>
+
 </OpenGLAPI>
diff --git a/src/mapi/glapi/gen/gles_api.py b/src/mapi/glapi/gen/gles_api.py
index 0116ba4..70ae2e3 100644
--- a/src/mapi/glapi/gen/gles_api.py
+++ b/src/mapi/glapi/gen/gles_api.py
@@ -451,4 +451,6 @@ es2_api = es2_core + (
         'ProgramBinaryOES',
         # GL_NV_draw_buffers
         'DrawBuffersNV',
+        # GL_NV_read_buffer
+        'ReadBufferNV',
 )
diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
index f23857a..64e666e 100644
--- a/src/mesa/main/APIspec.xml
+++ b/src/mesa/main/APIspec.xml
@@ -3534,6 +3534,13 @@
 	</proto>
 </template>
 
+<template name="ReadBuffer">
+	<proto>
+		<return type="void"/>
+		<param name="mode" type="GLenum"/>
+	</proto>
+</template>
+
 <api name="mesa" implementation="true">
 	<category name="MESA"/>
 
@@ -3810,6 +3817,9 @@
         <function name="EGLImageTargetRenderbufferStorageOES" template="EGLImageTargetRenderbufferStorage"/>
 
 	<function name="DrawBuffersARB" template="DrawBuffers"/>
+
+	<function name="ReadBuffer" template="ReadBuffer"/>
+
 </api>
 
 <api name="GLES1.1">
@@ -4150,7 +4160,10 @@
         <category name="EXT_unpack_subimage"/>
 
 	<category name="NV_draw_buffers"/>
+	<category name="NV_read_buffer"/>
+
 	<function name="DrawBuffersNV" template="DrawBuffers"/>
+	<function name="ReadBufferNV" template="ReadBuffer"/> 
 
 	<function name="CullFace" template="CullFace"/>
 
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 2688f7a..0e81783 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -300,6 +300,7 @@ static const struct extension extension_table[] = {
    { "GL_NV_packed_depth_stencil",                 o(EXT_packed_depth_stencil),                GL,             2000 },
    { "GL_NV_point_sprite",                         o(NV_point_sprite),                         GL,             2001 },
    { "GL_NV_primitive_restart",                    o(NV_primitive_restart),                    GL,             2002 },
+   { "GL_NV_read_buffer",                          o(dummy_true),                              ES2,            2011 },
    { "GL_NV_texgen_reflection",                    o(NV_texgen_reflection),                    GL,             1999 },
    { "GL_NV_texture_barrier",                      o(NV_texture_barrier),                      GL,             2009 },
    { "GL_NV_texture_env_combine4",                 o(NV_texture_env_combine4),                 GL,             1999 },
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index a8e1d86..969b55b 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -131,6 +131,7 @@ enum value_extra {
    EXTRA_VERSION_30,
    EXTRA_VERSION_31,
    EXTRA_VERSION_32,
+   EXTRA_API_GL,
    EXTRA_API_ES2,
    EXTRA_NEW_BUFFERS, 
    EXTRA_NEW_FRAG_CLAMP,
@@ -369,6 +370,13 @@ extra_ARB_vertex_program_api_es2[] = {
    EXTRA_END
 };
 
+static const int
+extra_NV_read_buffer_api_gl[] = {
+   EXT(NV_read_buffer),
+   EXTRA_API_GL,
+   EXTRA_END
+};
+
 #define API_OPENGL_BIT (1 << API_OPENGL)
 #define API_OPENGLES_BIT (1 << API_OPENGLES)
 #define API_OPENGLES2_BIT (1 << API_OPENGLES2)
@@ -750,6 +758,11 @@ static const struct value_desc values[] = {
    /* GL_ARB_fragment_program/OES_standard_derivatives */
    { GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB,
      CONTEXT_ENUM(Hint.FragmentShaderDerivative), extra_ARB_fragment_shader },
+
+   /* GL_NV_read_buffer */
+   { GL_READ_BUFFER,
+     LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, extra_NV_read_buffer_api_gl },
+
 #endif /* FEATURE_GL || FEATURE_ES2 */
 
 #if FEATURE_ES2
@@ -884,7 +897,6 @@ static const struct value_desc values[] = {
    { GL_POLYGON_SMOOTH, CONTEXT_BOOL(Polygon.SmoothFlag), NO_EXTRA },
    { GL_POLYGON_SMOOTH_HINT, CONTEXT_ENUM(Hint.PolygonSmooth), NO_EXTRA },
    { GL_POLYGON_STIPPLE, CONTEXT_BOOL(Polygon.StippleFlag), NO_EXTRA },
-   { GL_READ_BUFFER, LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA },
    { GL_RED_BIAS, CONTEXT_FLOAT(Pixel.RedBias), NO_EXTRA },
    { GL_RED_SCALE, CONTEXT_FLOAT(Pixel.RedScale), NO_EXTRA },
    { GL_RENDER_MODE, CONTEXT_ENUM(RenderMode), NO_EXTRA },
@@ -1814,6 +1826,12 @@ check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d
 	    enabled++;
 	 }
 	 break;
+      case EXTRA_API_GL:
+	 if (ctx->API == API_OPENGL) {
+	    total++;
+	    enabled++;
+	 }
+	 break;
       case EXTRA_NEW_BUFFERS:
 	 if (ctx->NewState & _NEW_BUFFERS)
 	    _mesa_update_state(ctx);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index ea40ffc..3d18b7c 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2995,6 +2995,7 @@ struct gl_extensions
    GLboolean NV_light_max_exponent;
    GLboolean NV_point_sprite;
    GLboolean NV_primitive_restart;
+   GLboolean NV_read_buffer;
    GLboolean NV_texture_barrier;
    GLboolean NV_texgen_reflection;
    GLboolean NV_texture_env_combine4;
-- 
1.7.10.2



More information about the mesa-dev mailing list