diff options
author | Kristian Høgsberg <[email protected]> | 2012-06-15 09:40:41 -0400 |
---|---|---|
committer | Kristian Høgsberg <[email protected]> | 2012-06-18 11:53:18 -0400 |
commit | 2d7b2d7a87f037fa435772b7ce7c7cc0f426d912 (patch) | |
tree | 162c5da30a23d9a14bdef4977b52a7af8c4bb154 /src/mesa/main | |
parent | e841a2426e9d58b8cfc95e6ccbe472d5960b3b62 (diff) |
gles2: Add GL_NV_read_buffer extension
This lets us select the front buffer for reading under GLES2.
Reviewed-by: Brian Paul <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/APIspec.xml | 13 | ||||
-rw-r--r-- | src/mesa/main/extensions.c | 1 | ||||
-rw-r--r-- | src/mesa/main/get.c | 22 | ||||
-rw-r--r-- | src/mesa/main/mtypes.h | 1 |
4 files changed, 36 insertions, 1 deletions
diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml index f23857ad2f4..64e666effd6 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 2688f7acedc..0e8178397d9 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 a8e1d8681c5..8dc47306f90 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,15 @@ extra_ARB_vertex_program_api_es2[] = { EXTRA_END }; +/* The ReadBuffer get token is valid under either full GL or under + * GLES2 if the NV_read_buffer extension is available. */ +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 +760,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 +899,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 +1828,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 ea40ffc9c06..3d18b7c4869 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; |