[Mesa-dev] [PATCH 1/1] mesa: initial work for OES_vertex_type_10_10_10_2 extension support.
Ian Romanick
idr at freedesktop.org
Tue May 22 11:53:17 PDT 2012
On 05/22/2012 12:55 AM, Oliver McFadden wrote:
> Currently not supported by any driver implementation; this only adds the
> API framework.
>
> Signed-off-by: Oliver McFadden<oliver.mcfadden at linux.intel.com>
Other than the (mostly pre-existing) error mentioned below and the minor
nit,
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/mesa/main/APIspec.xml | 7 +++----
> src/mesa/main/extensions.c | 1 +
> src/mesa/main/glheader.h | 5 +++++
> src/mesa/main/mtypes.h | 1 +
> src/mesa/main/varray.c | 14 +++++++++++++-
> 5 files changed, 23 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
> index f23857a..71cc47e 100644
> --- a/src/mesa/main/APIspec.xml
> +++ b/src/mesa/main/APIspec.xml
> @@ -2691,15 +2691,13 @@
> <value name="GL_FLOAT"/>
> <value name="GL_FIXED"/>
> <value name="GL_HALF_FLOAT_OES" category="OES_vertex_half_float"/>
> - <value name="GL_UNSIGNED_INT_10_10_10_2_OES" category="OES_vertex_type_10_10_10_2"/>
> - <value name="GL_INT_10_10_10_2_OES" category="OES_vertex_type_10_10_10_2"/>
> </desc>
>
> - <desc name="type" category="OES_vertex_type_10_10_10_2">
> + <desc name="type" error="GL_INVALID_VALUE" category="OES_vertex_type_10_10_10_2">
This error (and the existing error for the previous desc block) is not
correct. It should be INVALID_ENUM. Page 14 (page 24 of the PDF) of
the OpenGL ES 2.0.25 spec says:
"If a command that requires an enumerated value is passed a
symbolic constant that is not one of those specified as allowable
for that command, the error INVALID_ENUM error is generated."
> <value name="GL_UNSIGNED_INT_10_10_10_2_OES"/>
> <value name="GL_INT_10_10_10_2_OES"/>
>
> - <desc name="size">
> + <desc name="size" error="GL_INVALID_VALUE">
> <value name="3"/>
> <value name="4"/>
> </desc>
> @@ -4122,6 +4120,7 @@
> <api name="GLES2.0">
> <category name="GLES2.0"/>
>
> + <category name="OES_vertex_type_10_10_10_2"/>
> <category name="OES_compressed_paletted_texture"/>
> <category name="OES_compressed_ETC1_RGB8_texture"/>
> <category name="OES_depth24"/>
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index a843a40..9b74f1c 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -258,6 +258,7 @@ static const struct extension extension_table[] = {
> { "GL_OES_texture_env_crossbar", o(ARB_texture_env_crossbar), ES1, 2005 },
> { "GL_OES_texture_mirrored_repeat", o(dummy_true), ES1, 2005 },
> { "GL_OES_texture_npot", o(ARB_texture_non_power_of_two), ES2, 2005 },
> + { "GL_OES_vertex_type_10_10_10_2", o(OES_vertex_type_10_10_10_2), ES2, 2008 },
>
> /* Vendor extensions */
> { "GL_3DFX_texture_compression_FXT1", o(TDFX_texture_compression_FXT1), GL, 1999 },
> diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
> index 3152323..30ce34d 100644
> --- a/src/mesa/main/glheader.h
> +++ b/src/mesa/main/glheader.h
> @@ -143,6 +143,11 @@ typedef void *GLeglImageOES;
> #define GL_ETC1_RGB8_OES 0x8D64
> #endif
>
> +/* GL_OES_vertex_type_10_10_10_2 */
> +#ifndef GL_OES_vertex_type_10_10_10_2
> +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6
> +#define GL_INT_10_10_10_2_OES 0x8DF7
> +#endif
>
> /**
> * Internal token to represent a GLSL shader program (a collection of
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index eefe5e7..51ebc00 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -2964,6 +2964,7 @@ struct gl_extensions
> GLboolean EXT_timer_query;
> GLboolean EXT_vertex_array_bgra;
> GLboolean OES_standard_derivatives;
> + GLboolean OES_vertex_type_10_10_10_2;
> /* vendor extensions */
> GLboolean AMD_seamless_cubemap_per_texture;
> GLboolean APPLE_packed_pixels;
> diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
> index efa63b0..376e62f 100644
> --- a/src/mesa/main/varray.c
> +++ b/src/mesa/main/varray.c
> @@ -61,6 +61,8 @@
> #define FIXED_GL_BIT 0x800
> #define UNSIGNED_INT_2_10_10_10_REV_BIT 0x1000
> #define INT_2_10_10_10_REV_BIT 0x2000
> +#define UNSIGNED_INT_10_10_10_2_OES_BIT 0x8000
> +#define INT_10_10_10_2_OES_BIT 0x10000
I don't think we need OES here. The other OES types (fixed and half)
don't have that decoration.
>
>
> /** Convert GL datatype enum into a<type>_BIT value seen above */
> @@ -97,6 +99,10 @@ type_to_bit(const struct gl_context *ctx, GLenum type)
> return UNSIGNED_INT_2_10_10_10_REV_BIT;
> case GL_INT_2_10_10_10_REV:
> return INT_2_10_10_10_REV_BIT;
> + case GL_UNSIGNED_INT_10_10_10_2_OES:
> + return UNSIGNED_INT_10_10_10_2_OES_BIT;
> + case GL_INT_10_10_10_2_OES:
> + return INT_10_10_10_2_OES_BIT;
> default:
> return 0;
> }
> @@ -144,6 +150,10 @@ update_array(struct gl_context *ctx,
> legalTypesMask&= ~(UNSIGNED_INT_2_10_10_10_REV_BIT |
> INT_2_10_10_10_REV_BIT);
> }
> + if (!ctx->Extensions.OES_vertex_type_10_10_10_2) {
> + legalTypesMask&= ~(UNSIGNED_INT_10_10_10_2_OES_BIT |
> + INT_10_10_10_2_OES_BIT);
> + }
>
> typeBit = type_to_bit(ctx, type);
> if (typeBit == 0x0 || (typeBit& legalTypesMask) == 0x0) {
> @@ -434,7 +444,9 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
> HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
> FIXED_ES_BIT | FIXED_GL_BIT |
> UNSIGNED_INT_2_10_10_10_REV_BIT |
> - INT_2_10_10_10_REV_BIT);
> + INT_2_10_10_10_REV_BIT |
> + UNSIGNED_INT_10_10_10_2_OES_BIT |
> + INT_10_10_10_2_OES_BIT);
> GET_CURRENT_CONTEXT(ctx);
> ASSERT_OUTSIDE_BEGIN_END(ctx);
>
More information about the mesa-dev
mailing list