[Mesa-dev] [PATCH] mesa: replace GLenum with GLenum16 in common structures (v4)

Marek Olšák maraeo at gmail.com
Mon Jan 29 18:11:56 UTC 2018


Looks good to me.

Marek

On Mon, Jan 29, 2018 at 6:54 PM, Brian Paul <brianp at vmware.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> v2: - fix glGet*
>     - also use GLenum16 for DrawBuffers
> v3: - rebase to top of tree (BrianP) and incorporate Ian's suggestions
> v4: - fix a GLenum16 bug in VBO/save code, add some STATIC_ASSERT()s
>
> gl_context = 152432 -> 136840 bytes
> vbo_context = 22096 -> 20608 bytes
>
> Reviewed-by: Brian Paul <brianp at vmware.com>
> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
> ---
>  src/mesa/drivers/common/meta.h                 |   2 +-
>  src/mesa/drivers/dri/nouveau/nv04_state_frag.c |   4 +-
>  src/mesa/drivers/dri/nouveau/nv10_state_frag.c |   4 +-
>  src/mesa/main/attrib.c                         |  13 +-
>  src/mesa/main/buffers.c                        |  12 +-
>  src/mesa/main/buffers.h                        |   2 +-
>  src/mesa/main/context.c                        |   2 +-
>  src/mesa/main/get.c                            |  38 +++++
>  src/mesa/main/get_hash_params.py               | 152 +++++++++---------
>  src/mesa/main/glheader.h                       |   1 +
>  src/mesa/main/mtypes.h                         | 204 ++++++++++++-------------
>  src/mesa/vbo/vbo_exec.h                        |   2 +-
>  src/mesa/vbo/vbo_save.h                        |   4 +-
>  src/mesa/vbo/vbo_save_api.c                    |   2 +
>  src/mesa/vbo/vbo_save_draw.c                   |   4 +-
>  15 files changed, 250 insertions(+), 196 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h
> index 6d51854..3d9c291 100644
> --- a/src/mesa/drivers/common/meta.h
> +++ b/src/mesa/drivers/common/meta.h
> @@ -190,7 +190,7 @@ struct save_state
>     struct gl_framebuffer *ReadBuffer;
>
>     /** MESA_META_DRAW_BUFFERS */
> -   GLenum ColorDrawBuffers[MAX_DRAW_BUFFERS];
> +   GLenum16 ColorDrawBuffers[MAX_DRAW_BUFFERS];
>  };
>
>  /**
> diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_frag.c b/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
> index 248a7d2..bfe8eae 100644
> --- a/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
> +++ b/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
> @@ -49,8 +49,8 @@ struct combiner_state {
>
>         /* GL state */
>         GLenum mode;
> -       GLenum *source;
> -       GLenum *operand;
> +       GLenum16 *source;
> +       GLenum16 *operand;
>         GLuint logscale;
>
>         /* Derived HW state */
> diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
> index c6e4bb0..42dff08 100644
> --- a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
> +++ b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
> @@ -67,8 +67,8 @@ struct combiner_state {
>
>         /* GL state */
>         GLenum mode;
> -       GLenum *source;
> -       GLenum *operand;
> +       GLenum16 *source;
> +       GLenum16 *operand;
>         GLuint logscale;
>
>         /* Derived HW state */
> diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
> index 50b65c4..3c12fd6 100644
> --- a/src/mesa/main/attrib.c
> +++ b/src/mesa/main/attrib.c
> @@ -1005,11 +1005,16 @@ _mesa_PopAttrib(void)
>                     * user FBO bound, GL_FRONT will be illegal and we'll need
>                     * to record that error.  Per OpenGL ARB decision.
>                     */
> -                  if (multipleBuffers)
> -                     _mesa_DrawBuffers(ctx->Const.MaxDrawBuffers,
> -                                          color->DrawBuffer);
> -                  else
> +                  if (multipleBuffers) {
> +                     GLenum buffers[MAX_DRAW_BUFFERS];
> +
> +                     for (unsigned i = 0; i < ctx->Const.MaxDrawBuffers; i++)
> +                        buffers[i] = color->DrawBuffer[i];
> +
> +                     _mesa_DrawBuffers(ctx->Const.MaxDrawBuffers, buffers);
> +                  } else {
>                       _mesa_DrawBuffer(color->DrawBuffer[0]);
> +                  }
>                 }
>                 _mesa_set_enable(ctx, GL_ALPHA_TEST, color->AlphaEnabled);
>                 _mesa_AlphaFunc(color->AlphaFunc, color->AlphaRefUnclamped);
> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
> index d364047..5492227 100644
> --- a/src/mesa/main/buffers.c
> +++ b/src/mesa/main/buffers.c
> @@ -299,7 +299,8 @@ draw_buffer(struct gl_context *ctx, struct gl_framebuffer *fb,
>     }
>
>     /* if we get here, there's no error so set new state */
> -   _mesa_drawbuffers(ctx, fb, 1, &buffer, &destMask);
> +   const GLenum16 buffer16 = buffer;
> +   _mesa_drawbuffers(ctx, fb, 1, &buffer16, &destMask);
>
>     /* Call device driver function only if fb is the bound draw buffer */
>     if (fb == ctx->DrawBuffer) {
> @@ -573,7 +574,11 @@ draw_buffers(struct gl_context *ctx, struct gl_framebuffer *fb, GLsizei n,
>     }
>
>     /* OK, if we get here, there were no errors so set the new state */
> -   _mesa_drawbuffers(ctx, fb, n, buffers, destMask);
> +   GLenum16 buffers16[MAX_DRAW_BUFFERS];
> +   for (int i = 0; i < n; i++)
> +      buffers16[i] = buffers[i];
> +
> +   _mesa_drawbuffers(ctx, fb, n, buffers16, destMask);
>
>     /*
>      * Call device driver function if fb is the bound draw buffer.
> @@ -694,7 +699,8 @@ updated_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb)
>   */
>  void
>  _mesa_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
> -                  GLuint n, const GLenum *buffers, const GLbitfield *destMask)
> +                  GLuint n, const GLenum16 *buffers,
> +                  const GLbitfield *destMask)
>  {
>     GLbitfield mask[MAX_DRAW_BUFFERS];
>     GLuint buf;
> diff --git a/src/mesa/main/buffers.h b/src/mesa/main/buffers.h
> index e484006..c438107 100644
> --- a/src/mesa/main/buffers.h
> +++ b/src/mesa/main/buffers.h
> @@ -68,7 +68,7 @@ _mesa_NamedFramebufferDrawBuffers(GLuint framebuffer, GLsizei n,
>
>  extern void
>  _mesa_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
> -                  GLuint n, const GLenum *buffers,
> +                  GLuint n, const GLenum16 *buffers,
>                    const GLbitfield *destMask);
>
>  extern void
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index a52c981..7dbf678 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -1583,7 +1583,7 @@ handle_first_current(struct gl_context *ctx)
>      */
>     if (!ctx->HasConfig && _mesa_is_desktop_gl(ctx)) {
>        if (ctx->DrawBuffer != _mesa_get_incomplete_framebuffer()) {
> -         GLenum buffer;
> +         GLenum16 buffer;
>
>           if (ctx->DrawBuffer->Visual.doubleBufferMode)
>              buffer = GL_BACK;
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index 5fee9a6..b41fdb2 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -101,6 +101,7 @@ enum value_type {
>     TYPE_UINT_3,
>     TYPE_UINT_4,
>     TYPE_INT64,
> +   TYPE_ENUM16,
>     TYPE_ENUM,
>     TYPE_ENUM_2,
>     TYPE_BOOLEAN,
> @@ -206,12 +207,14 @@ union value {
>
>  #define BUFFER_INT(field) BUFFER_FIELD(field, TYPE_INT)
>  #define BUFFER_ENUM(field) BUFFER_FIELD(field, TYPE_ENUM)
> +#define BUFFER_ENUM16(field) BUFFER_FIELD(field, TYPE_ENUM16)
>  #define BUFFER_BOOL(field) BUFFER_FIELD(field, TYPE_BOOLEAN)
>
>  #define CONTEXT_INT(field) CONTEXT_FIELD(field, TYPE_INT)
>  #define CONTEXT_INT2(field) CONTEXT_FIELD(field, TYPE_INT_2)
>  #define CONTEXT_INT64(field) CONTEXT_FIELD(field, TYPE_INT64)
>  #define CONTEXT_UINT(field) CONTEXT_FIELD(field, TYPE_UINT)
> +#define CONTEXT_ENUM16(field) CONTEXT_FIELD(field, TYPE_ENUM16)
>  #define CONTEXT_ENUM(field) CONTEXT_FIELD(field, TYPE_ENUM)
>  #define CONTEXT_ENUM2(field) CONTEXT_FIELD(field, TYPE_ENUM_2)
>  #define CONTEXT_BOOL(field) CONTEXT_FIELD(field, TYPE_BOOLEAN)
> @@ -233,6 +236,7 @@ union value {
>
>  #define ARRAY_INT(field) ARRAY_FIELD(field, TYPE_INT)
>  #define ARRAY_ENUM(field) ARRAY_FIELD(field, TYPE_ENUM)
> +#define ARRAY_ENUM16(field) ARRAY_FIELD(field, TYPE_ENUM16)
>  #define ARRAY_BOOL(field) ARRAY_FIELD(field, TYPE_BOOLEAN)
>
>  #define EXT(f)                                 \
> @@ -1488,6 +1492,8 @@ get_value_size(enum value_type type, const union value *v)
>     case TYPE_INT64:
>        return sizeof(GLint64);
>        break;
> +   case TYPE_ENUM16:
> +      return sizeof(GLenum16);
>     case TYPE_ENUM:
>        return sizeof(GLenum);
>     case TYPE_ENUM_2:
> @@ -1588,6 +1594,10 @@ _mesa_GetBooleanv(GLenum pname, GLboolean *params)
>        params[0] = INT_TO_BOOLEAN(((GLint *) p)[0]);
>        break;
>
> +   case TYPE_ENUM16:
> +      params[0] = INT_TO_BOOLEAN(((GLenum16 *) p)[0]);
> +      break;
> +
>     case TYPE_INT_N:
>        for (i = 0; i < v.value_int_n.n; i++)
>           params[i] = INT_TO_BOOLEAN(v.value_int_n.ints[i]);
> @@ -1681,6 +1691,10 @@ _mesa_GetFloatv(GLenum pname, GLfloat *params)
>        params[0] = (GLfloat) (((GLint *) p)[0]);
>        break;
>
> +   case TYPE_ENUM16:
> +      params[0] = (GLfloat) (((GLenum16 *) p)[0]);
> +      break;
> +
>     case TYPE_INT_N:
>        for (i = 0; i < v.value_int_n.n; i++)
>           params[i] = (GLfloat) v.value_int_n.ints[i];
> @@ -1794,6 +1808,10 @@ _mesa_GetIntegerv(GLenum pname, GLint *params)
>        params[0] = ((GLint *) p)[0];
>        break;
>
> +   case TYPE_ENUM16:
> +      params[0] = ((GLenum16 *) p)[0];
> +      break;
> +
>     case TYPE_INT_N:
>        for (i = 0; i < v.value_int_n.n; i++)
>           params[i] = v.value_int_n.ints[i];
> @@ -1893,6 +1911,10 @@ _mesa_GetInteger64v(GLenum pname, GLint64 *params)
>        params[0] = ((GLint *) p)[0];
>        break;
>
> +   case TYPE_ENUM16:
> +      params[0] = ((GLenum16 *) p)[0];
> +      break;
> +
>     case TYPE_INT_N:
>        for (i = 0; i < v.value_int_n.n; i++)
>           params[i] = INT_TO_BOOLEAN(v.value_int_n.ints[i]);
> @@ -1996,6 +2018,10 @@ _mesa_GetDoublev(GLenum pname, GLdouble *params)
>        params[0] = ((GLint *) p)[0];
>        break;
>
> +   case TYPE_ENUM16:
> +      params[0] = ((GLenum16 *) p)[0];
> +      break;
> +
>     case TYPE_INT_N:
>        for (i = 0; i < v.value_int_n.n; i++)
>           params[i] = v.value_int_n.ints[i];
> @@ -2113,6 +2139,11 @@ _mesa_GetUnsignedBytevEXT(GLenum pname, GLubyte *data)
>     case TYPE_MATRIX_T:
>        memcpy(data, p, size);
>        break;
> +   case TYPE_ENUM16: {
> +      GLenum e = *(GLenum16 *)p;
> +      memcpy(data, &e, sizeof(e));
> +      break;
> +   }
>     default:
>        break; /* nothing - GL error was recorded */
>     }
> @@ -2708,6 +2739,7 @@ _mesa_GetFloati_v(GLenum pname, GLuint index, GLfloat *params)
>        params[1] = (GLfloat) v.value_int_4[1];
>     case TYPE_INT:
>     case TYPE_ENUM:
> +   case TYPE_ENUM16:
>        params[0] = (GLfloat) v.value_int_4[0];
>        break;
>
> @@ -2790,6 +2822,7 @@ _mesa_GetDoublei_v(GLenum pname, GLuint index, GLdouble *params)
>        params[1] = (GLdouble) v.value_int_4[1];
>     case TYPE_INT:
>     case TYPE_ENUM:
> +   case TYPE_ENUM16:
>        params[0] = (GLdouble) v.value_int_4[0];
>        break;
>
> @@ -2864,6 +2897,7 @@ _mesa_GetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte *data)
>     case TYPE_INT_4:
>     case TYPE_UINT_4:
>     case TYPE_INT64:
> +   case TYPE_ENUM16:
>     case TYPE_ENUM:
>     case TYPE_ENUM_2:
>     case TYPE_BOOLEAN:
> @@ -2943,6 +2977,10 @@ _mesa_GetFixedv(GLenum pname, GLfixed *params)
>        params[0] = INT_TO_FIXED(((GLint *) p)[0]);
>        break;
>
> +   case TYPE_ENUM16:
> +      params[0] = INT_TO_FIXED(((GLenum16 *) p)[0]);
> +      break;
> +
>     case TYPE_INT_N:
>        for (i = 0; i < v.value_int_n.n; i++)
>           params[i] = INT_TO_FIXED(v.value_int_n.ints[i]);
> diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
> index bc71574..0edf4c6 100644
> --- a/src/mesa/main/get_hash_params.py
> +++ b/src/mesa/main/get_hash_params.py
> @@ -2,20 +2,20 @@ descriptor=[
>  { "apis": ["GL", "GLES", "GLES2", "GL_CORE"], "params": [
>    [ "ALPHA_BITS", "BUFFER_INT(Visual.alphaBits), extra_new_buffers" ],
>    [ "BLEND", "CONTEXT_BIT0(Color.BlendEnabled), NO_EXTRA" ],
> -  [ "BLEND_SRC", "CONTEXT_ENUM(Color.Blend[0].SrcRGB), NO_EXTRA" ],
> +  [ "BLEND_SRC", "CONTEXT_ENUM16(Color.Blend[0].SrcRGB), NO_EXTRA" ],
>    [ "BLUE_BITS", "BUFFER_INT(Visual.blueBits), extra_new_buffers" ],
>    [ "COLOR_CLEAR_VALUE", "LOC_CUSTOM, TYPE_FLOATN_4, 0, extra_new_frag_clamp" ],
>    [ "COLOR_WRITEMASK", "LOC_CUSTOM, TYPE_INT_4, 0, NO_EXTRA" ],
>    [ "CULL_FACE", "CONTEXT_BOOL(Polygon.CullFlag), NO_EXTRA" ],
> -  [ "CULL_FACE_MODE", "CONTEXT_ENUM(Polygon.CullFaceMode), NO_EXTRA" ],
> +  [ "CULL_FACE_MODE", "CONTEXT_ENUM16(Polygon.CullFaceMode), NO_EXTRA" ],
>    [ "DEPTH_BITS", "BUFFER_INT(Visual.depthBits), extra_new_buffers" ],
>    [ "DEPTH_CLEAR_VALUE", "CONTEXT_FIELD(Depth.Clear, TYPE_DOUBLEN), NO_EXTRA" ],
> -  [ "DEPTH_FUNC", "CONTEXT_ENUM(Depth.Func), NO_EXTRA" ],
> +  [ "DEPTH_FUNC", "CONTEXT_ENUM16(Depth.Func), NO_EXTRA" ],
>    [ "DEPTH_RANGE", "LOC_CUSTOM, TYPE_DOUBLEN_2, 0, NO_EXTRA" ],
>    [ "DEPTH_TEST", "CONTEXT_BOOL(Depth.Test), NO_EXTRA" ],
>    [ "DEPTH_WRITEMASK", "CONTEXT_BOOL(Depth.Mask), NO_EXTRA" ],
>    [ "DITHER", "CONTEXT_BOOL(Color.DitherFlag), NO_EXTRA" ],
> -  [ "FRONT_FACE", "CONTEXT_ENUM(Polygon.FrontFace), NO_EXTRA" ],
> +  [ "FRONT_FACE", "CONTEXT_ENUM16(Polygon.FrontFace), NO_EXTRA" ],
>    [ "GREEN_BITS", "BUFFER_INT(Visual.greenBits), extra_new_buffers" ],
>    [ "LINE_WIDTH", "CONTEXT_FLOAT(Line.Width), NO_EXTRA" ],
>    [ "ALIASED_LINE_WIDTH_RANGE", "CONTEXT_FLOAT2(Const.MinLineWidth), NO_EXTRA" ],
> @@ -33,10 +33,10 @@ descriptor=[
>    [ "SCISSOR_TEST", "LOC_CUSTOM, TYPE_BOOLEAN, NO_OFFSET, NO_EXTRA" ],
>    [ "STENCIL_BITS", "BUFFER_INT(Visual.stencilBits), extra_new_buffers" ],
>    [ "STENCIL_CLEAR_VALUE", "CONTEXT_INT(Stencil.Clear), NO_EXTRA" ],
> -  [ "STENCIL_FAIL", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA" ],
> -  [ "STENCIL_FUNC", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA" ],
> -  [ "STENCIL_PASS_DEPTH_FAIL", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA" ],
> -  [ "STENCIL_PASS_DEPTH_PASS", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA" ],
> +  [ "STENCIL_FAIL", "LOC_CUSTOM, TYPE_ENUM16, NO_OFFSET, NO_EXTRA" ],
> +  [ "STENCIL_FUNC", "LOC_CUSTOM, TYPE_ENUM16, NO_OFFSET, NO_EXTRA" ],
> +  [ "STENCIL_PASS_DEPTH_FAIL", "LOC_CUSTOM, TYPE_ENUM16, NO_OFFSET, NO_EXTRA" ],
> +  [ "STENCIL_PASS_DEPTH_PASS", "LOC_CUSTOM, TYPE_ENUM16, NO_OFFSET, NO_EXTRA" ],
>    [ "STENCIL_REF", "LOC_CUSTOM, TYPE_UINT, NO_OFFSET, NO_EXTRA" ],
>    [ "STENCIL_TEST", "CONTEXT_BOOL(Stencil.Enabled), NO_EXTRA" ],
>    [ "STENCIL_VALUE_MASK", "LOC_CUSTOM, TYPE_UINT, NO_OFFSET, NO_EXTRA" ],
> @@ -61,15 +61,15 @@ descriptor=[
>    [ "MAX_CUBE_MAP_TEXTURE_SIZE_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_context, Const.MaxCubeTextureLevels), extra_ARB_texture_cube_map" ],
>
>  # XXX: OES_blend_subtract
> -  [ "BLEND_SRC_RGB", "CONTEXT_ENUM(Color.Blend[0].SrcRGB), NO_EXTRA" ],
> -  [ "BLEND_DST_RGB", "CONTEXT_ENUM(Color.Blend[0].DstRGB), NO_EXTRA" ],
> -  [ "BLEND_SRC_ALPHA", "CONTEXT_ENUM(Color.Blend[0].SrcA), NO_EXTRA" ],
> -  [ "BLEND_DST_ALPHA", "CONTEXT_ENUM(Color.Blend[0].DstA), NO_EXTRA" ],
> +  [ "BLEND_SRC_RGB", "CONTEXT_ENUM16(Color.Blend[0].SrcRGB), NO_EXTRA" ],
> +  [ "BLEND_DST_RGB", "CONTEXT_ENUM16(Color.Blend[0].DstRGB), NO_EXTRA" ],
> +  [ "BLEND_SRC_ALPHA", "CONTEXT_ENUM16(Color.Blend[0].SrcA), NO_EXTRA" ],
> +  [ "BLEND_DST_ALPHA", "CONTEXT_ENUM16(Color.Blend[0].DstA), NO_EXTRA" ],
>
>  # GL_BLEND_EQUATION_RGB, which is what we're really after, is
>  # defined identically to GL_BLEND_EQUATION.
> -  [ "BLEND_EQUATION", "CONTEXT_ENUM(Color.Blend[0].EquationRGB), NO_EXTRA" ],
> -  [ "BLEND_EQUATION_ALPHA_EXT", "CONTEXT_ENUM(Color.Blend[0].EquationA), NO_EXTRA" ],
> +  [ "BLEND_EQUATION", "CONTEXT_ENUM16(Color.Blend[0].EquationRGB), NO_EXTRA" ],
> +  [ "BLEND_EQUATION_ALPHA_EXT", "CONTEXT_ENUM16(Color.Blend[0].EquationA), NO_EXTRA" ],
>
>  # GL_ARB_texture_compression
>    [ "NUM_COMPRESSED_TEXTURE_FORMATS_ARB", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
> @@ -88,7 +88,7 @@ descriptor=[
>    [ "MIN_SAMPLE_SHADING_VALUE_ARB", "CONTEXT_FLOAT(Multisample.MinSampleShadingValue), extra_gl40_ARB_sample_shading" ],
>
>  # GL_SGIS_generate_mipmap
> -  [ "GENERATE_MIPMAP_HINT_SGIS", "CONTEXT_ENUM(Hint.GenerateMipmap), NO_EXTRA" ],
> +  [ "GENERATE_MIPMAP_HINT_SGIS", "CONTEXT_ENUM16(Hint.GenerateMipmap), NO_EXTRA" ],
>
>  # GL_ARB_vertex_buffer_object
>    [ "ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
> @@ -98,9 +98,9 @@ descriptor=[
>    [ "ELEMENT_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
>
>  # GL_ARB_color_buffer_float
> -  [ "CLAMP_VERTEX_COLOR", "CONTEXT_ENUM(Light.ClampVertexColor), extra_ARB_color_buffer_float" ],
> -  [ "CLAMP_FRAGMENT_COLOR", "CONTEXT_ENUM(Color.ClampFragmentColor), extra_ARB_color_buffer_float" ],
> -  [ "CLAMP_READ_COLOR", "CONTEXT_ENUM(Color.ClampReadColor), extra_ARB_color_buffer_float_or_glcore" ],
> +  [ "CLAMP_VERTEX_COLOR", "CONTEXT_ENUM16(Light.ClampVertexColor), extra_ARB_color_buffer_float" ],
> +  [ "CLAMP_FRAGMENT_COLOR", "CONTEXT_ENUM16(Color.ClampFragmentColor), extra_ARB_color_buffer_float" ],
> +  [ "CLAMP_READ_COLOR", "CONTEXT_ENUM16(Color.ClampReadColor), extra_ARB_color_buffer_float_or_glcore" ],
>
>  # GL_ARB_copy_buffer
>    [ "COPY_READ_BUFFER", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
> @@ -155,9 +155,9 @@ descriptor=[
>    [ "LIGHT_MODEL_AMBIENT", "CONTEXT_FIELD(Light.Model.Ambient[0], TYPE_FLOATN_4), NO_EXTRA" ],
>    [ "LIGHT_MODEL_TWO_SIDE", "CONTEXT_BOOL(Light.Model.TwoSide), NO_EXTRA" ],
>    [ "ALPHA_TEST", "CONTEXT_BOOL(Color.AlphaEnabled), NO_EXTRA" ],
> -  [ "ALPHA_TEST_FUNC", "CONTEXT_ENUM(Color.AlphaFunc), NO_EXTRA" ],
> +  [ "ALPHA_TEST_FUNC", "CONTEXT_ENUM16(Color.AlphaFunc), NO_EXTRA" ],
>    [ "ALPHA_TEST_REF", "LOC_CUSTOM, TYPE_FLOATN, 0, extra_new_frag_clamp" ],
> -  [ "BLEND_DST", "CONTEXT_ENUM(Color.Blend[0].DstRGB), NO_EXTRA" ],
> +  [ "BLEND_DST", "CONTEXT_ENUM16(Color.Blend[0].DstRGB), NO_EXTRA" ],
>    [ "CLIP_DISTANCE0", "CONTEXT_BIT0(Transform.ClipPlanesEnabled), extra_valid_clip_distance" ],
>    [ "CLIP_DISTANCE1", "CONTEXT_BIT1(Transform.ClipPlanesEnabled), extra_valid_clip_distance" ],
>    [ "CLIP_DISTANCE2", "CONTEXT_BIT2(Transform.ClipPlanesEnabled), extra_valid_clip_distance" ],
> @@ -175,15 +175,15 @@ descriptor=[
>    [ "FOG_COLOR", "LOC_CUSTOM, TYPE_FLOATN_4, 0, extra_new_frag_clamp" ],
>    [ "FOG_DENSITY", "CONTEXT_FLOAT(Fog.Density), NO_EXTRA" ],
>    [ "FOG_END", "CONTEXT_FLOAT(Fog.End), NO_EXTRA" ],
> -  [ "FOG_HINT", "CONTEXT_ENUM(Hint.Fog), NO_EXTRA" ],
> -  [ "FOG_MODE", "CONTEXT_ENUM(Fog.Mode), NO_EXTRA" ],
> +  [ "FOG_HINT", "CONTEXT_ENUM16(Hint.Fog), NO_EXTRA" ],
> +  [ "FOG_MODE", "CONTEXT_ENUM16(Fog.Mode), NO_EXTRA" ],
>    [ "FOG_START", "CONTEXT_FLOAT(Fog.Start), NO_EXTRA" ],
>    [ "LINE_SMOOTH", "CONTEXT_BOOL(Line.SmoothFlag), NO_EXTRA" ],
> -  [ "LINE_SMOOTH_HINT", "CONTEXT_ENUM(Hint.LineSmooth), NO_EXTRA" ],
> +  [ "LINE_SMOOTH_HINT", "CONTEXT_ENUM16(Hint.LineSmooth), NO_EXTRA" ],
>    [ "LINE_WIDTH_RANGE", "CONTEXT_FLOAT2(Const.MinLineWidthAA), NO_EXTRA" ],
>    [ "COLOR_LOGIC_OP", "CONTEXT_BOOL(Color.ColorLogicOpEnabled), NO_EXTRA" ],
> -  [ "LOGIC_OP_MODE", "CONTEXT_ENUM(Color.LogicOp), NO_EXTRA" ],
> -  [ "MATRIX_MODE", "CONTEXT_ENUM(Transform.MatrixMode), NO_EXTRA" ],
> +  [ "LOGIC_OP_MODE", "CONTEXT_ENUM16(Color.LogicOp), NO_EXTRA" ],
> +  [ "MATRIX_MODE", "CONTEXT_ENUM16(Transform.MatrixMode), NO_EXTRA" ],
>    [ "MAX_MODELVIEW_STACK_DEPTH", "CONST(MAX_MODELVIEW_STACK_DEPTH), NO_EXTRA" ],
>    [ "MAX_PROJECTION_STACK_DEPTH", "CONST(MAX_PROJECTION_STACK_DEPTH), NO_EXTRA" ],
>    [ "MAX_TEXTURE_STACK_DEPTH", "CONST(MAX_TEXTURE_STACK_DEPTH), NO_EXTRA" ],
> @@ -191,35 +191,35 @@ descriptor=[
>    [ "MODELVIEW_STACK_DEPTH", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_context, ModelviewMatrixStack.Depth), NO_EXTRA" ],
>    [ "NORMALIZE", "CONTEXT_BOOL(Transform.Normalize), NO_EXTRA" ],
>    [ "PACK_SKIP_IMAGES", "CONTEXT_INT(Pack.SkipImages), NO_EXTRA" ],
> -  [ "PERSPECTIVE_CORRECTION_HINT", "CONTEXT_ENUM(Hint.PerspectiveCorrection), NO_EXTRA" ],
> +  [ "PERSPECTIVE_CORRECTION_HINT", "CONTEXT_ENUM16(Hint.PerspectiveCorrection), NO_EXTRA" ],
>    [ "POINT_SIZE", "CONTEXT_FLOAT(Point.Size), NO_EXTRA" ],
>    [ "POINT_SIZE_RANGE", "CONTEXT_FLOAT2(Const.MinPointSizeAA), NO_EXTRA" ],
>    [ "POINT_SMOOTH", "CONTEXT_BOOL(Point.SmoothFlag), NO_EXTRA" ],
> -  [ "POINT_SMOOTH_HINT", "CONTEXT_ENUM(Hint.PointSmooth), NO_EXTRA" ],
> +  [ "POINT_SMOOTH_HINT", "CONTEXT_ENUM16(Hint.PointSmooth), NO_EXTRA" ],
>    [ "POINT_SIZE_MIN_EXT", "CONTEXT_FLOAT(Point.MinSize), NO_EXTRA" ],
>    [ "POINT_SIZE_MAX_EXT", "CONTEXT_FLOAT(Point.MaxSize), NO_EXTRA" ],
>    [ "POINT_FADE_THRESHOLD_SIZE_EXT", "CONTEXT_FLOAT(Point.Threshold), NO_EXTRA" ],
>    [ "PROJECTION_MATRIX", "CONTEXT_MATRIX(ProjectionMatrixStack.Top), NO_EXTRA" ],
>    [ "PROJECTION_STACK_DEPTH", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_context, ProjectionMatrixStack.Depth), NO_EXTRA" ],
>    [ "RESCALE_NORMAL", "CONTEXT_BOOL(Transform.RescaleNormals), NO_EXTRA" ],
> -  [ "SHADE_MODEL", "CONTEXT_ENUM(Light.ShadeModel), NO_EXTRA" ],
> +  [ "SHADE_MODEL", "CONTEXT_ENUM16(Light.ShadeModel), NO_EXTRA" ],
>    [ "TEXTURE_2D", "LOC_CUSTOM, TYPE_BOOLEAN, 0, NO_EXTRA" ],
>    [ "TEXTURE_MATRIX", "LOC_CUSTOM, TYPE_MATRIX, 0, extra_valid_texture_unit" ],
>    [ "TEXTURE_STACK_DEPTH", "LOC_CUSTOM, TYPE_INT, 0, extra_valid_texture_unit" ],
>    [ "VERTEX_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_POS].Enabled), NO_EXTRA" ],
>    [ "VERTEX_ARRAY_SIZE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_POS].Size), NO_EXTRA" ],
> -  [ "VERTEX_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_POS].Type), NO_EXTRA" ],
> +  [ "VERTEX_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_POS].Type), NO_EXTRA" ],
>    [ "VERTEX_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_POS].Stride), NO_EXTRA" ],
>    [ "NORMAL_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_NORMAL].Enabled), NO_EXTRA" ],
> -  [ "NORMAL_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_NORMAL].Type), NO_EXTRA" ],
> +  [ "NORMAL_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_NORMAL].Type), NO_EXTRA" ],
>    [ "NORMAL_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_NORMAL].Stride), NO_EXTRA" ],
>    [ "COLOR_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR0].Enabled), NO_EXTRA" ],
>    [ "COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
> -  [ "COLOR_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_COLOR0].Type), NO_EXTRA" ],
> +  [ "COLOR_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_COLOR0].Type), NO_EXTRA" ],
>    [ "COLOR_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR0].Stride), NO_EXTRA" ],
>    [ "TEXTURE_COORD_ARRAY", "LOC_CUSTOM, TYPE_BOOLEAN, offsetof(struct gl_array_attributes, Enabled), NO_EXTRA" ],
>    [ "TEXTURE_COORD_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_attributes, Size), NO_EXTRA" ],
> -  [ "TEXTURE_COORD_ARRAY_TYPE", "LOC_CUSTOM, TYPE_ENUM, offsetof(struct gl_array_attributes, Type), NO_EXTRA" ],
> +  [ "TEXTURE_COORD_ARRAY_TYPE", "LOC_CUSTOM, TYPE_ENUM16, offsetof(struct gl_array_attributes, Type), NO_EXTRA" ],
>    [ "TEXTURE_COORD_ARRAY_STRIDE", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_attributes, Stride), NO_EXTRA" ],
>
>  # GL_ARB_multitexture
> @@ -249,7 +249,7 @@ descriptor=[
>  { "apis": ["GLES"], "params": [
>  # OES_point_size_array
>    [ "POINT_SIZE_ARRAY_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled, TYPE_BOOLEAN), NO_EXTRA" ],
> -  [ "POINT_SIZE_ARRAY_TYPE_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Type, TYPE_ENUM), NO_EXTRA" ],
> +  [ "POINT_SIZE_ARRAY_TYPE_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Type, TYPE_ENUM16), NO_EXTRA" ],
>    [ "POINT_SIZE_ARRAY_STRIDE_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Stride, TYPE_INT), NO_EXTRA" ],
>    [ "POINT_SIZE_ARRAY_BUFFER_BINDING_OES", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
>  ]},
> @@ -279,14 +279,14 @@ descriptor=[
>    [ "MAX_COLOR_ATTACHMENTS", "CONTEXT_INT(Const.MaxColorAttachments), NO_EXTRA" ],
>
>  # GL_ARB_draw_buffers / GL_NV_draw_buffers (for ES 2.0)
> -  [ "DRAW_BUFFER0_ARB", "BUFFER_ENUM(ColorDrawBuffer[0]), NO_EXTRA" ],
> -  [ "DRAW_BUFFER1_ARB", "BUFFER_ENUM(ColorDrawBuffer[1]), extra_valid_draw_buffer" ],
> -  [ "DRAW_BUFFER2_ARB", "BUFFER_ENUM(ColorDrawBuffer[2]), extra_valid_draw_buffer" ],
> -  [ "DRAW_BUFFER3_ARB", "BUFFER_ENUM(ColorDrawBuffer[3]), extra_valid_draw_buffer" ],
> -  [ "DRAW_BUFFER4_ARB", "BUFFER_ENUM(ColorDrawBuffer[4]), extra_valid_draw_buffer" ],
> -  [ "DRAW_BUFFER5_ARB", "BUFFER_ENUM(ColorDrawBuffer[5]), extra_valid_draw_buffer" ],
> -  [ "DRAW_BUFFER6_ARB", "BUFFER_ENUM(ColorDrawBuffer[6]), extra_valid_draw_buffer" ],
> -  [ "DRAW_BUFFER7_ARB", "BUFFER_ENUM(ColorDrawBuffer[7]), extra_valid_draw_buffer" ],
> +  [ "DRAW_BUFFER0_ARB", "BUFFER_ENUM16(ColorDrawBuffer[0]), NO_EXTRA" ],
> +  [ "DRAW_BUFFER1_ARB", "BUFFER_ENUM16(ColorDrawBuffer[1]), extra_valid_draw_buffer" ],
> +  [ "DRAW_BUFFER2_ARB", "BUFFER_ENUM16(ColorDrawBuffer[2]), extra_valid_draw_buffer" ],
> +  [ "DRAW_BUFFER3_ARB", "BUFFER_ENUM16(ColorDrawBuffer[3]), extra_valid_draw_buffer" ],
> +  [ "DRAW_BUFFER4_ARB", "BUFFER_ENUM16(ColorDrawBuffer[4]), extra_valid_draw_buffer" ],
> +  [ "DRAW_BUFFER5_ARB", "BUFFER_ENUM16(ColorDrawBuffer[5]), extra_valid_draw_buffer" ],
> +  [ "DRAW_BUFFER6_ARB", "BUFFER_ENUM16(ColorDrawBuffer[6]), extra_valid_draw_buffer" ],
> +  [ "DRAW_BUFFER7_ARB", "BUFFER_ENUM16(ColorDrawBuffer[7]), extra_valid_draw_buffer" ],
>    [ "BLEND_COLOR_EXT", "LOC_CUSTOM, TYPE_FLOATN_4, 0, extra_new_frag_clamp" ],
>
>  # GL_ARB_fragment_program
> @@ -301,13 +301,13 @@ descriptor=[
>    [ "CURRENT_PROGRAM", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
>
>  # OpenGL 2.0
> -  [ "STENCIL_BACK_FUNC", "CONTEXT_ENUM(Stencil.Function[1]), NO_EXTRA" ],
> +  [ "STENCIL_BACK_FUNC", "CONTEXT_ENUM16(Stencil.Function[1]), NO_EXTRA" ],
>    [ "STENCIL_BACK_VALUE_MASK", "CONTEXT_UINT(Stencil.ValueMask[1]), NO_EXTRA" ],
>    [ "STENCIL_BACK_WRITEMASK", "CONTEXT_UINT(Stencil.WriteMask[1]), NO_EXTRA" ],
>    [ "STENCIL_BACK_REF", "LOC_CUSTOM, TYPE_UINT, NO_OFFSET, NO_EXTRA" ],
> -  [ "STENCIL_BACK_FAIL", "CONTEXT_ENUM(Stencil.FailFunc[1]), NO_EXTRA" ],
> -  [ "STENCIL_BACK_PASS_DEPTH_FAIL", "CONTEXT_ENUM(Stencil.ZFailFunc[1]), NO_EXTRA" ],
> -  [ "STENCIL_BACK_PASS_DEPTH_PASS", "CONTEXT_ENUM(Stencil.ZPassFunc[1]), NO_EXTRA" ],
> +  [ "STENCIL_BACK_FAIL", "CONTEXT_ENUM16(Stencil.FailFunc[1]), NO_EXTRA" ],
> +  [ "STENCIL_BACK_PASS_DEPTH_FAIL", "CONTEXT_ENUM16(Stencil.ZFailFunc[1]), NO_EXTRA" ],
> +  [ "STENCIL_BACK_PASS_DEPTH_PASS", "CONTEXT_ENUM16(Stencil.ZPassFunc[1]), NO_EXTRA" ],
>    [ "MAX_VERTEX_ATTRIBS_ARB", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxAttribs), extra_ARB_vertex_program_api_es2" ],
>
>  # OES_texture_3D
> @@ -315,10 +315,10 @@ descriptor=[
>    [ "MAX_3D_TEXTURE_SIZE", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_context, Const.Max3DTextureLevels), NO_EXTRA" ],
>
>  # GL_ARB_fragment_program/OES_standard_derivatives
> -  [ "FRAGMENT_SHADER_DERIVATIVE_HINT", "CONTEXT_ENUM(Hint.FragmentShaderDerivative), extra_ARB_fragment_shader" ],
> +  [ "FRAGMENT_SHADER_DERIVATIVE_HINT", "CONTEXT_ENUM16(Hint.FragmentShaderDerivative), extra_ARB_fragment_shader" ],
>
>  # GL_NV_read_buffer
> -  [ "READ_BUFFER", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, extra_NV_read_buffer_api_gl" ],
> +  [ "READ_BUFFER", "LOC_CUSTOM, TYPE_ENUM16, NO_OFFSET, extra_NV_read_buffer_api_gl" ],
>
>  # GL_ARB_ES2_compatibility
>    [ "SHADER_COMPILER", "CONST(1), extra_ARB_ES2_compatibility_api_es2" ],
> @@ -339,7 +339,7 @@ descriptor=[
>    [ "PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL", "CONST(PERFQUERY_HAVE_GPA_EXTENDED_COUNTERS), extra_INTEL_performance_query" ],
>
>  # GL_KHR_context_flush_control
> -  [ "CONTEXT_RELEASE_BEHAVIOR", "CONTEXT_ENUM(Const.ContextReleaseBehavior), NO_EXTRA" ],
> +  [ "CONTEXT_RELEASE_BEHAVIOR", "CONTEXT_ENUM16(Const.ContextReleaseBehavior), NO_EXTRA" ],
>
>  # blend_func_extended
>    [ "MAX_DUAL_SOURCE_DRAW_BUFFERS", "CONTEXT_INT(Const.MaxDualSourceDrawBuffers), extra_ARB_blend_func_extended" ],
> @@ -348,8 +348,8 @@ descriptor=[
>    [ "BLEND_ADVANCED_COHERENT_KHR", "CONTEXT_BOOL(Color.BlendCoherent), extra_KHR_blend_equation_advanced_coherent" ],
>
>  # GL_ARB_robustness / GL_KHR_robustness
> -  [ "CONTEXT_ROBUST_ACCESS", "CONTEXT_ENUM(Const.RobustAccess), extra_KHR_robustness" ],
> -  [ "RESET_NOTIFICATION_STRATEGY_ARB", "CONTEXT_ENUM(Const.ResetStrategy), extra_KHR_robustness_or_GL" ],
> +  [ "CONTEXT_ROBUST_ACCESS", "CONTEXT_ENUM16(Const.RobustAccess), extra_KHR_robustness" ],
> +  [ "RESET_NOTIFICATION_STRATEGY_ARB", "CONTEXT_ENUM16(Const.ResetStrategy), extra_KHR_robustness_or_GL" ],
>  ]},
>
>  # GLES3 is not a typo.
> @@ -432,7 +432,7 @@ descriptor=[
>  # GL_EXT_window_rectangles
>    [ "MAX_WINDOW_RECTANGLES_EXT", "CONTEXT_INT(Const.MaxWindowRectangles), extra_EXT_window_rectangles" ],
>    [ "NUM_WINDOW_RECTANGLES_EXT", "CONTEXT_INT(Scissor.NumWindowRects), extra_EXT_window_rectangles" ],
> -  [ "WINDOW_RECTANGLE_MODE_EXT", "CONTEXT_ENUM(Scissor.WindowRectMode), extra_EXT_window_rectangles" ],
> +  [ "WINDOW_RECTANGLE_MODE_EXT", "CONTEXT_ENUM16(Scissor.WindowRectMode), extra_EXT_window_rectangles" ],
>  ]},
>
>  { "apis": ["GLES", "GLES2"], "params": [
> @@ -516,11 +516,11 @@ descriptor=[
>    [ "PROGRAM_PIPELINE_BINDING", "LOC_CUSTOM, TYPE_INT, GL_PROGRAM_PIPELINE_BINDING, NO_EXTRA" ],
>
>  # GL_ARB_vertex_attrib_binding / GLES 3.1
> -  [ "MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", "CONTEXT_ENUM(Const.MaxVertexAttribRelativeOffset), NO_EXTRA" ],
> -  [ "MAX_VERTEX_ATTRIB_BINDINGS", "CONTEXT_ENUM(Const.MaxVertexAttribBindings), NO_EXTRA" ],
> +  [ "MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", "CONTEXT_ENUM16(Const.MaxVertexAttribRelativeOffset), NO_EXTRA" ],
> +  [ "MAX_VERTEX_ATTRIB_BINDINGS", "CONTEXT_ENUM16(Const.MaxVertexAttribBindings), NO_EXTRA" ],
>
>  # GL 4.4 / GLES 3.1
> -  [ "MAX_VERTEX_ATTRIB_STRIDE", "CONTEXT_ENUM(Const.MaxVertexAttribStride), NO_EXTRA" ],
> +  [ "MAX_VERTEX_ATTRIB_STRIDE", "CONTEXT_ENUM16(Const.MaxVertexAttribStride), NO_EXTRA" ],
>
>    # GL_ARB_shader_storage_buffer_object / GLES 3.1
>    [ "MAX_VERTEX_SHADER_STORAGE_BLOCKS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxShaderStorageBlocks), extra_ARB_shader_storage_buffer_object_es31" ],
> @@ -612,7 +612,7 @@ descriptor=[
>    [ "MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxCombinedUniformComponents), extra_ARB_uniform_buffer_object_and_geometry_shader" ],
>
>  # GL_ARB_viewport_array / GL_OES_geometry_shader
> -  [ "LAYER_PROVOKING_VERTEX", "CONTEXT_ENUM(Const.LayerAndVPIndexProvokingVertex), extra_ARB_viewport_array_or_oes_geometry_shader" ],
> +  [ "LAYER_PROVOKING_VERTEX", "CONTEXT_ENUM16(Const.LayerAndVPIndexProvokingVertex), extra_ARB_viewport_array_or_oes_geometry_shader" ],
>
>  # GL_ARB_gpu_shader5 / GL_OES_geometry_shader
>    [ "MAX_GEOMETRY_SHADER_INVOCATIONS", "CONST(MAX_GEOMETRY_SHADER_INVOCATIONS), extra_ARB_gpu_shader5_or_oes_geometry_shader" ],
> @@ -624,7 +624,7 @@ descriptor=[
>    [ "MAX_VIEWPORTS", "CONTEXT_INT(Const.MaxViewports), extra_ARB_viewport_array_or_oes_viewport_array" ],
>    [ "VIEWPORT_SUBPIXEL_BITS", "CONTEXT_INT(Const.ViewportSubpixelBits), extra_ARB_viewport_array_or_oes_viewport_array" ],
>    [ "VIEWPORT_BOUNDS_RANGE", "CONTEXT_FLOAT2(Const.ViewportBounds), extra_ARB_viewport_array_or_oes_viewport_array" ],
> -  [ "VIEWPORT_INDEX_PROVOKING_VERTEX", "CONTEXT_ENUM(Const.LayerAndVPIndexProvokingVertex), extra_ARB_viewport_array_or_oes_viewport_array" ],
> +  [ "VIEWPORT_INDEX_PROVOKING_VERTEX", "CONTEXT_ENUM16(Const.LayerAndVPIndexProvokingVertex), extra_ARB_viewport_array_or_oes_viewport_array" ],
>
>  # INTEL_conservative_rasterization
>    [ "CONSERVATIVE_RASTERIZATION_INTEL", "CONTEXT_BOOL(IntelConservativeRasterization), extra_INTEL_conservative_rasterization" ],
> @@ -654,11 +654,11 @@ descriptor=[
>    [ "AUX_BUFFERS", "BUFFER_INT(Visual.numAuxBuffers), NO_EXTRA" ],
>    [ "BLUE_BIAS", "CONTEXT_FLOAT(Pixel.BlueBias), NO_EXTRA" ],
>    [ "BLUE_SCALE", "CONTEXT_FLOAT(Pixel.BlueScale), NO_EXTRA" ],
> -  [ "CLIP_DEPTH_MODE", "CONTEXT_ENUM(Transform.ClipDepthMode), extra_ARB_clip_control" ],
> -  [ "CLIP_ORIGIN", "CONTEXT_ENUM(Transform.ClipOrigin), extra_ARB_clip_control" ],
> +  [ "CLIP_DEPTH_MODE", "CONTEXT_ENUM16(Transform.ClipDepthMode), extra_ARB_clip_control" ],
> +  [ "CLIP_ORIGIN", "CONTEXT_ENUM16(Transform.ClipOrigin), extra_ARB_clip_control" ],
>    [ "CLIENT_ATTRIB_STACK_DEPTH", "CONTEXT_INT(ClientAttribStackDepth), NO_EXTRA" ],
> -  [ "COLOR_MATERIAL_FACE", "CONTEXT_ENUM(Light.ColorMaterialFace), NO_EXTRA" ],
> -  [ "COLOR_MATERIAL_PARAMETER", "CONTEXT_ENUM(Light.ColorMaterialMode), NO_EXTRA" ],
> +  [ "COLOR_MATERIAL_FACE", "CONTEXT_ENUM16(Light.ColorMaterialFace), NO_EXTRA" ],
> +  [ "COLOR_MATERIAL_PARAMETER", "CONTEXT_ENUM16(Light.ColorMaterialMode), NO_EXTRA" ],
>    [ "CURRENT_INDEX", "CONTEXT_FLOAT(Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]), extra_flush_current" ],
>    [ "CURRENT_RASTER_COLOR", "CONTEXT_FIELD(Current.RasterColor[0], TYPE_FLOATN_4), NO_EXTRA" ],
>    [ "CURRENT_RASTER_DISTANCE", "CONTEXT_FLOAT(Current.RasterDistance), NO_EXTRA" ],
> @@ -670,10 +670,10 @@ descriptor=[
>    [ "DEPTH_BIAS", "CONTEXT_FLOAT(Pixel.DepthBias), NO_EXTRA" ],
>    [ "DEPTH_SCALE", "CONTEXT_FLOAT(Pixel.DepthScale), NO_EXTRA" ],
>    [ "DOUBLEBUFFER", "BUFFER_INT(Visual.doubleBufferMode), NO_EXTRA" ],
> -  [ "DRAW_BUFFER", "BUFFER_ENUM(ColorDrawBuffer[0]), NO_EXTRA" ],
> +  [ "DRAW_BUFFER", "BUFFER_ENUM16(ColorDrawBuffer[0]), NO_EXTRA" ],
>    [ "EDGE_FLAG", "LOC_CUSTOM, TYPE_BOOLEAN, 0, extra_flush_current" ],
>    [ "FEEDBACK_BUFFER_SIZE", "CONTEXT_INT(Feedback.BufferSize), NO_EXTRA" ],
> -  [ "FEEDBACK_BUFFER_TYPE", "CONTEXT_ENUM(Feedback.Type), NO_EXTRA" ],
> +  [ "FEEDBACK_BUFFER_TYPE", "CONTEXT_ENUM16(Feedback.Type), NO_EXTRA" ],
>    [ "FOG_INDEX", "CONTEXT_FLOAT(Fog.Index), NO_EXTRA" ],
>    [ "GREEN_BIAS", "CONTEXT_FLOAT(Pixel.GreenBias), NO_EXTRA" ],
>    [ "GREEN_SCALE", "CONTEXT_FLOAT(Pixel.GreenScale), NO_EXTRA" ],
> @@ -683,7 +683,7 @@ descriptor=[
>    [ "INDEX_OFFSET", "CONTEXT_INT(Pixel.IndexOffset), NO_EXTRA" ],
>    [ "INDEX_SHIFT", "CONTEXT_INT(Pixel.IndexShift), NO_EXTRA" ],
>    [ "INDEX_WRITEMASK", "CONTEXT_INT(Color.IndexMask), NO_EXTRA" ],
> -  [ "LIGHT_MODEL_COLOR_CONTROL", "CONTEXT_ENUM(Light.Model.ColorControl), NO_EXTRA" ],
> +  [ "LIGHT_MODEL_COLOR_CONTROL", "CONTEXT_ENUM16(Light.Model.ColorControl), NO_EXTRA" ],
>    [ "LIGHT_MODEL_LOCAL_VIEWER", "CONTEXT_BOOL(Light.Model.LocalViewer), NO_EXTRA" ],
>    [ "LINE_STIPPLE", "CONTEXT_BOOL(Line.StippleFlag), NO_EXTRA" ],
>    [ "LINE_STIPPLE_PATTERN", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
> @@ -691,7 +691,7 @@ descriptor=[
>    [ "LINE_WIDTH_GRANULARITY", "CONTEXT_FLOAT(Const.LineWidthGranularity), NO_EXTRA" ],
>    [ "LIST_BASE", "CONTEXT_INT(List.ListBase), NO_EXTRA" ],
>    [ "LIST_INDEX", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
> -  [ "LIST_MODE", "LOC_CUSTOM, TYPE_ENUM, 0, NO_EXTRA" ],
> +  [ "LIST_MODE", "LOC_CUSTOM, TYPE_ENUM16, 0, NO_EXTRA" ],
>    [ "INDEX_LOGIC_OP", "CONTEXT_BOOL(Color.IndexLogicOpEnabled), NO_EXTRA" ],
>    [ "MAP1_COLOR_4", "CONTEXT_BOOL(Eval.Map1Color4), NO_EXTRA" ],
>    [ "MAP1_GRID_DOMAIN", "CONTEXT_FLOAT2(Eval.MapGrid1u1), NO_EXTRA" ],
> @@ -738,16 +738,16 @@ descriptor=[
>    [ "PIXEL_MAP_R_TO_R_SIZE", "CONTEXT_INT(PixelMaps.RtoR.Size), NO_EXTRA" ],
>    [ "PIXEL_MAP_S_TO_S_SIZE", "CONTEXT_INT(PixelMaps.StoS.Size), NO_EXTRA" ],
>    [ "POINT_SIZE_GRANULARITY", "CONTEXT_FLOAT(Const.PointSizeGranularity), NO_EXTRA" ],
> -  [ "POLYGON_MODE", "CONTEXT_ENUM2(Polygon.FrontMode), NO_EXTRA" ],
> +  [ "POLYGON_MODE", "CONTEXT_ENUM16(Polygon.FrontMode), NO_EXTRA" ],
>    [ "POLYGON_OFFSET_BIAS_EXT", "CONTEXT_FLOAT(Polygon.OffsetUnits), NO_EXTRA" ],
>    [ "POLYGON_OFFSET_POINT", "CONTEXT_BOOL(Polygon.OffsetPoint), NO_EXTRA" ],
>    [ "POLYGON_OFFSET_LINE", "CONTEXT_BOOL(Polygon.OffsetLine), NO_EXTRA" ],
>    [ "POLYGON_SMOOTH", "CONTEXT_BOOL(Polygon.SmoothFlag), NO_EXTRA" ],
> -  [ "POLYGON_SMOOTH_HINT", "CONTEXT_ENUM(Hint.PolygonSmooth), NO_EXTRA" ],
> +  [ "POLYGON_SMOOTH_HINT", "CONTEXT_ENUM16(Hint.PolygonSmooth), NO_EXTRA" ],
>    [ "POLYGON_STIPPLE", "CONTEXT_BOOL(Polygon.StippleFlag), NO_EXTRA" ],
>    [ "RED_BIAS", "CONTEXT_FLOAT(Pixel.RedBias), NO_EXTRA" ],
>    [ "RED_SCALE", "CONTEXT_FLOAT(Pixel.RedScale), NO_EXTRA" ],
> -  [ "RENDER_MODE", "CONTEXT_ENUM(RenderMode), NO_EXTRA" ],
> +  [ "RENDER_MODE", "CONTEXT_ENUM16(RenderMode), NO_EXTRA" ],
>    [ "RGBA_MODE", "CONST(1), NO_EXTRA" ],
>    [ "SELECTION_BUFFER_SIZE", "CONTEXT_INT(Select.BufferSize), NO_EXTRA" ],
>    [ "STEREO", "BUFFER_INT(Visual.stereoMode), NO_EXTRA" ],
> @@ -769,7 +769,7 @@ descriptor=[
>    [ "NORMAL_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
>    [ "COLOR_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
>    [ "INDEX_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled), NO_EXTRA" ],
> -  [ "INDEX_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Type), NO_EXTRA" ],
> +  [ "INDEX_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Type), NO_EXTRA" ],
>    [ "INDEX_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Stride), NO_EXTRA" ],
>    [ "INDEX_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
>    [ "TEXTURE_COORD_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
> @@ -803,26 +803,26 @@ descriptor=[
>    [ "COLOR_SUM", "CONTEXT_BOOL(Fog.ColorSumEnabled), NO_EXTRA" ],
>    [ "CURRENT_SECONDARY_COLOR", "CONTEXT_FIELD(Current.Attrib[VERT_ATTRIB_COLOR1][0], TYPE_FLOATN_4), extra_flush_current" ],
>    [ "SECONDARY_COLOR_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR1].Enabled), NO_EXTRA" ],
> -  [ "SECONDARY_COLOR_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_COLOR1].Type), NO_EXTRA" ],
> +  [ "SECONDARY_COLOR_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_COLOR1].Type), NO_EXTRA" ],
>    [ "SECONDARY_COLOR_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR1].Stride), NO_EXTRA" ],
>    [ "SECONDARY_COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
>
>  # GL_EXT_fog_coord
>    [ "CURRENT_FOG_COORDINATE", "CONTEXT_FLOAT(Current.Attrib[VERT_ATTRIB_FOG][0]), extra_flush_current" ],
>    [ "FOG_COORDINATE_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_FOG].Enabled), NO_EXTRA" ],
> -  [ "FOG_COORDINATE_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_FOG].Type), NO_EXTRA" ],
> +  [ "FOG_COORDINATE_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_FOG].Type), NO_EXTRA" ],
>    [ "FOG_COORDINATE_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_FOG].Stride), NO_EXTRA" ],
> -  [ "FOG_COORDINATE_SOURCE", "CONTEXT_ENUM(Fog.FogCoordinateSource), NO_EXTRA" ],
> +  [ "FOG_COORDINATE_SOURCE", "CONTEXT_ENUM16(Fog.FogCoordinateSource), NO_EXTRA" ],
>
>  # GL_NV_fog_distance
> -  [ "FOG_DISTANCE_MODE_NV", "CONTEXT_ENUM(Fog.FogDistanceMode), extra_NV_fog_distance" ],
> +  [ "FOG_DISTANCE_MODE_NV", "CONTEXT_ENUM16(Fog.FogDistanceMode), extra_NV_fog_distance" ],
>
>  # GL_IBM_rasterpos_clip
>    [ "RASTER_POSITION_UNCLIPPED_IBM", "CONTEXT_BOOL(Transform.RasterPositionUnclipped), NO_EXTRA" ],
>
>  # GL_NV_point_sprite
> -  [ "POINT_SPRITE_R_MODE_NV", "CONTEXT_ENUM(Point.SpriteRMode), extra_NV_point_sprite" ],
> -  [ "POINT_SPRITE_COORD_ORIGIN", "CONTEXT_ENUM(Point.SpriteOrigin), extra_NV_point_sprite_ARB_point_sprite" ],
> +  [ "POINT_SPRITE_R_MODE_NV", "CONTEXT_ENUM16(Point.SpriteRMode), extra_NV_point_sprite" ],
> +  [ "POINT_SPRITE_COORD_ORIGIN", "CONTEXT_ENUM16(Point.SpriteOrigin), extra_NV_point_sprite_ARB_point_sprite" ],
>
>  # GL_NV_texture_rectangle
>    [ "TEXTURE_RECTANGLE_NV", "LOC_CUSTOM, TYPE_BOOLEAN, 0, extra_NV_texture_rectangle" ],
> @@ -831,7 +831,7 @@ descriptor=[
>
>  # GL_EXT_stencil_two_side
>    [ "STENCIL_TEST_TWO_SIDE_EXT", "CONTEXT_BOOL(Stencil.TestTwoSide), extra_EXT_stencil_two_side" ],
> -  [ "ACTIVE_STENCIL_FACE_EXT", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA" ],
> +  [ "ACTIVE_STENCIL_FACE_EXT", "LOC_CUSTOM, TYPE_ENUM16, NO_OFFSET, NO_EXTRA" ],
>
>  # GL_NV_light_max_exponent
>    [ "MAX_SHININESS_NV", "CONTEXT_FLOAT(Const.MaxShininess), NO_EXTRA" ],
> @@ -892,7 +892,7 @@ descriptor=[
>    [ "NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI", "CONST(3), extra_ATI_fragment_shader" ],
>
>  # GL_EXT_provoking_vertex
> -  [ "PROVOKING_VERTEX_EXT", "CONTEXT_ENUM(Light.ProvokingVertex), extra_EXT_provoking_vertex" ],
> +  [ "PROVOKING_VERTEX_EXT", "CONTEXT_ENUM16(Light.ProvokingVertex), extra_EXT_provoking_vertex" ],
>    [ "QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT", "CONTEXT_BOOL(Const.QuadsFollowProvokingVertexConvention), extra_EXT_provoking_vertex_32" ],
>
>  # GL_ARB_seamless_cube_map
> diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
> index 35a442a..7a4b4a0 100644
> --- a/src/mesa/main/glheader.h
> +++ b/src/mesa/main/glheader.h
> @@ -43,6 +43,7 @@ extern "C" {
>  #endif
>
>
> +typedef unsigned short GLenum16; /* custom Mesa type to save space */
>  typedef int GLclampx;
>
>
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 9cd32c3..b0eeeaf 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -388,7 +388,7 @@ struct gl_lightmodel
>     GLfloat Ambient[4];         /**< ambient color */
>     GLboolean LocalViewer;      /**< Local (or infinite) view point? */
>     GLboolean TwoSide;          /**< Two (or one) sided lighting? */
> -   GLenum ColorControl;                /**< either GL_SINGLE_COLOR
> +   GLenum16 ColorControl;      /**< either GL_SINGLE_COLOR
>                                       or GL_SEPARATE_SPECULAR_COLOR */
>  };
>
> @@ -461,14 +461,14 @@ struct gl_colorbuffer_attrib
>     GLuint IndexMask;                       /**< Color index write mask */
>     GLubyte ColorMask[MAX_DRAW_BUFFERS][4]; /**< Each flag is 0xff or 0x0 */
>
> -   GLenum DrawBuffer[MAX_DRAW_BUFFERS];        /**< Which buffer to draw into */
> +   GLenum16 DrawBuffer[MAX_DRAW_BUFFERS];  /**< Which buffer to draw into */
>
>     /**
>      * \name alpha testing
>      */
>     /*@{*/
>     GLboolean AlphaEnabled;             /**< Alpha test enabled flag */
> -   GLenum AlphaFunc;                   /**< Alpha test function */
> +   GLenum16 AlphaFunc;                 /**< Alpha test function */
>     GLfloat AlphaRefUnclamped;
>     GLclampf AlphaRef;                  /**< Alpha reference value */
>     /*@}*/
> @@ -488,12 +488,12 @@ struct gl_colorbuffer_attrib
>
>     struct
>     {
> -      GLenum SrcRGB;             /**< RGB blend source term */
> -      GLenum DstRGB;             /**< RGB blend dest term */
> -      GLenum SrcA;               /**< Alpha blend source term */
> -      GLenum DstA;               /**< Alpha blend dest term */
> -      GLenum EquationRGB;        /**< GL_ADD, GL_SUBTRACT, etc. */
> -      GLenum EquationA;          /**< GL_ADD, GL_SUBTRACT, etc. */
> +      GLenum16 SrcRGB;             /**< RGB blend source term */
> +      GLenum16 DstRGB;             /**< RGB blend dest term */
> +      GLenum16 SrcA;               /**< Alpha blend source term */
> +      GLenum16 DstA;               /**< Alpha blend dest term */
> +      GLenum16 EquationRGB;        /**< GL_ADD, GL_SUBTRACT, etc. */
> +      GLenum16 EquationA;          /**< GL_ADD, GL_SUBTRACT, etc. */
>        /**
>         * Set if any blend factor uses SRC1.  Computed at the time blend factors
>         * get set.
> @@ -524,15 +524,15 @@ struct gl_colorbuffer_attrib
>     /*@{*/
>     GLboolean IndexLogicOpEnabled;      /**< Color index logic op enabled flag */
>     GLboolean ColorLogicOpEnabled;      /**< RGBA logic op enabled flag */
> -   GLenum LogicOp;                     /**< Logic operator */
> +   GLenum16 LogicOp;                   /**< Logic operator */
>     enum gl_logicop_mode _LogicOp;
>     /*@}*/
>
>     GLboolean DitherFlag;           /**< Dither enable flag */
>
>     GLboolean _ClampFragmentColor;  /** < with GL_FIXED_ONLY_ARB resolved */
> -   GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
> -   GLenum ClampReadColor;     /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
> +   GLenum16 ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
> +   GLenum16 ClampReadColor;     /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
>
>     GLboolean sRGBEnabled;  /**< Framebuffer sRGB blending/updating requested */
>  };
> @@ -570,7 +570,7 @@ struct gl_current_attrib
>   */
>  struct gl_depthbuffer_attrib
>  {
> -   GLenum Func;                        /**< Function for depth buffer compare */
> +   GLenum16 Func;              /**< Function for depth buffer compare */
>     GLclampd Clear;             /**< Value to clear depth buffer to */
>     GLboolean Test;             /**< Depth buffering enabled flag */
>     GLboolean Mask;             /**< Depth buffer writable? */
> @@ -649,10 +649,10 @@ struct gl_fog_attrib
>     GLfloat Start;              /**< Start distance in eye coords */
>     GLfloat End;                        /**< End distance in eye coords */
>     GLfloat Index;              /**< Fog index */
> -   GLenum Mode;                        /**< Fog mode */
> -   GLenum FogCoordinateSource;  /**< GL_EXT_fog_coord */
> +   GLenum16 Mode;              /**< Fog mode */
> +   GLenum16 FogCoordinateSource;/**< GL_EXT_fog_coord */
>     GLfloat _Scale;             /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */
> -   GLenum FogDistanceMode;     /**< GL_NV_fog_distance */
> +   GLenum16 FogDistanceMode;     /**< GL_NV_fog_distance */
>  };
>
>
> @@ -663,14 +663,14 @@ struct gl_fog_attrib
>   */
>  struct gl_hint_attrib
>  {
> -   GLenum PerspectiveCorrection;
> -   GLenum PointSmooth;
> -   GLenum LineSmooth;
> -   GLenum PolygonSmooth;
> -   GLenum Fog;
> -   GLenum TextureCompression;   /**< GL_ARB_texture_compression */
> -   GLenum GenerateMipmap;       /**< GL_SGIS_generate_mipmap */
> -   GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */
> +   GLenum16 PerspectiveCorrection;
> +   GLenum16 PointSmooth;
> +   GLenum16 LineSmooth;
> +   GLenum16 PolygonSmooth;
> +   GLenum16 Fog;
> +   GLenum16 TextureCompression;   /**< GL_ARB_texture_compression */
> +   GLenum16 GenerateMipmap;       /**< GL_SGIS_generate_mipmap */
> +   GLenum16 FragmentShaderDerivative; /**< GL_ARB_fragment_shader */
>  };
>
>
> @@ -691,15 +691,15 @@ struct gl_light_attrib
>     GLboolean Enabled;                  /**< Lighting enabled flag */
>     GLboolean ColorMaterialEnabled;
>
> -   GLenum ShadeModel;                  /**< GL_FLAT or GL_SMOOTH */
> -   GLenum ProvokingVertex;              /**< GL_EXT_provoking_vertex */
> -   GLenum ColorMaterialFace;           /**< GL_FRONT, BACK or FRONT_AND_BACK */
> -   GLenum ColorMaterialMode;           /**< GL_AMBIENT, GL_DIFFUSE, etc */
> +   GLenum16 ShadeModel;                        /**< GL_FLAT or GL_SMOOTH */
> +   GLenum16 ProvokingVertex;              /**< GL_EXT_provoking_vertex */
> +   GLenum16 ColorMaterialFace;         /**< GL_FRONT, BACK or FRONT_AND_BACK */
> +   GLenum16 ColorMaterialMode;         /**< GL_AMBIENT, GL_DIFFUSE, etc */
>     GLbitfield _ColorMaterialBitmask;   /**< bitmask formed from Face and Mode */
>
>
>     GLboolean _ClampVertexColor;
> -   GLenum ClampVertexColor;             /**< GL_TRUE, GL_FALSE, GL_FIXED_ONLY */
> +   GLenum16 ClampVertexColor;             /**< GL_TRUE, GL_FALSE, GL_FIXED_ONLY */
>
>     /**
>      * Derived state for optimizations:
> @@ -793,7 +793,7 @@ struct gl_pixelmaps
>   */
>  struct gl_pixel_attrib
>  {
> -   GLenum ReadBuffer;          /**< source buffer for glRead/CopyPixels() */
> +   GLenum16 ReadBuffer;                /**< source buffer for glRead/CopyPixels() */
>
>     /*--- Begin Pixel Transfer State ---*/
>     /* Fields are in the order in which they're applied... */
> @@ -833,8 +833,8 @@ struct gl_point_attrib
>     GLboolean _Attenuated;      /**< True if Params != [1, 0, 0] */
>     GLboolean PointSprite;      /**< GL_NV/ARB_point_sprite */
>     GLbitfield CoordReplace;     /**< GL_ARB_point_sprite*/
> -   GLenum SpriteRMode;         /**< GL_NV_point_sprite (only!) */
> -   GLenum SpriteOrigin;                /**< GL_ARB_point_sprite */
> +   GLenum16 SpriteRMode;       /**< GL_NV_point_sprite (only!) */
> +   GLenum16 SpriteOrigin;      /**< GL_ARB_point_sprite */
>  };
>
>
> @@ -843,13 +843,13 @@ struct gl_point_attrib
>   */
>  struct gl_polygon_attrib
>  {
> -   GLenum FrontFace;           /**< Either GL_CW or GL_CCW */
> -   GLenum FrontMode;           /**< Either GL_POINT, GL_LINE or GL_FILL */
> -   GLenum BackMode;            /**< Either GL_POINT, GL_LINE or GL_FILL */
> +   GLenum16 FrontFace;         /**< Either GL_CW or GL_CCW */
> +   GLenum16 FrontMode;         /**< Either GL_POINT, GL_LINE or GL_FILL */
> +   GLenum16 BackMode;          /**< Either GL_POINT, GL_LINE or GL_FILL */
>     GLboolean CullFlag;         /**< Culling on/off flag */
>     GLboolean SmoothFlag;       /**< True if GL_POLYGON_SMOOTH is enabled */
>     GLboolean StippleFlag;      /**< True if GL_POLYGON_STIPPLE is enabled */
> -   GLenum CullFaceMode;                /**< Culling mode GL_FRONT or GL_BACK */
> +   GLenum16 CullFaceMode;      /**< Culling mode GL_FRONT or GL_BACK */
>     GLfloat OffsetFactor;       /**< Polygon offset factor, from user */
>     GLfloat OffsetUnits;                /**< Polygon offset units, from user */
>     GLfloat OffsetClamp;                /**< Polygon offset clamp, from user */
> @@ -874,7 +874,7 @@ struct gl_scissor_attrib
>     GLbitfield EnableFlags;     /**< Scissor test enabled? */
>     struct gl_scissor_rect ScissorArray[MAX_VIEWPORTS];
>     GLint NumWindowRects;        /**< Count of enabled window rectangles */
> -   GLenum WindowRectMode;       /**< Whether to include or exclude the rects */
> +   GLenum16 WindowRectMode;     /**< Whether to include or exclude the rects */
>     struct gl_scissor_rect WindowRects[MAX_WINDOW_RECTANGLES];
>  };
>
> @@ -901,10 +901,10 @@ struct gl_stencil_attrib
>     GLboolean TestTwoSide;      /**< GL_EXT_stencil_two_side */
>     GLubyte ActiveFace;         /**< GL_EXT_stencil_two_side (0 or 2) */
>     GLubyte _BackFace;           /**< Current back stencil state (1 or 2) */
> -   GLenum Function[3];         /**< Stencil function */
> -   GLenum FailFunc[3];         /**< Fail function */
> -   GLenum ZPassFunc[3];                /**< Depth buffer pass function */
> -   GLenum ZFailFunc[3];                /**< Depth buffer fail function */
> +   GLenum16 Function[3];       /**< Stencil function */
> +   GLenum16 FailFunc[3];       /**< Fail function */
> +   GLenum16 ZPassFunc[3];      /**< Depth buffer pass function */
> +   GLenum16 ZFailFunc[3];      /**< Depth buffer fail function */
>     GLint Ref[3];               /**< Reference value */
>     GLuint ValueMask[3];                /**< Value mask */
>     GLuint WriteMask[3];                /**< Write mask */
> @@ -1019,19 +1019,19 @@ struct gl_sampler_object
>     GLint RefCount;
>     GLchar *Label;               /**< GL_KHR_debug */
>
> -   GLenum WrapS;               /**< S-axis texture image wrap mode */
> -   GLenum WrapT;               /**< T-axis texture image wrap mode */
> -   GLenum WrapR;               /**< R-axis texture image wrap mode */
> -   GLenum MinFilter;           /**< minification filter */
> -   GLenum MagFilter;           /**< magnification filter */
> +   GLenum16 WrapS;             /**< S-axis texture image wrap mode */
> +   GLenum16 WrapT;             /**< T-axis texture image wrap mode */
> +   GLenum16 WrapR;             /**< R-axis texture image wrap mode */
> +   GLenum16 MinFilter;         /**< minification filter */
> +   GLenum16 MagFilter;         /**< magnification filter */
>     union gl_color_union BorderColor;  /**< Interpreted according to texture format */
>     GLfloat MinLod;             /**< min lambda, OpenGL 1.2 */
>     GLfloat MaxLod;             /**< max lambda, OpenGL 1.2 */
>     GLfloat LodBias;            /**< OpenGL 1.4 */
>     GLfloat MaxAnisotropy;      /**< GL_EXT_texture_filter_anisotropic */
> -   GLenum CompareMode;         /**< GL_ARB_shadow */
> -   GLenum CompareFunc;         /**< GL_ARB_shadow */
> -   GLenum sRGBDecode;           /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
> +   GLenum16 CompareMode;               /**< GL_ARB_shadow */
> +   GLenum16 CompareFunc;               /**< GL_ARB_shadow */
> +   GLenum16 sRGBDecode;           /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
>     GLboolean CubeMapSeamless;   /**< GL_AMD_seamless_cubemap_per_texture */
>
>     /** GL_ARB_bindless_texture */
> @@ -1050,13 +1050,13 @@ struct gl_texture_object
>     GLint RefCount;               /**< reference count */
>     GLuint Name;                  /**< the user-visible texture object ID */
>     GLchar *Label;                /**< GL_KHR_debug */
> -   GLenum Target;                /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
> +   GLenum16 Target;              /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
>     gl_texture_index TargetIndex; /**< The gl_texture_unit::CurrentTex index.
>                                        Only valid when Target is valid. */
>
>     struct gl_sampler_object Sampler;
>
> -   GLenum DepthMode;           /**< GL_ARB_depth_texture */
> +   GLenum16 DepthMode;           /**< GL_ARB_depth_texture */
>
>     GLfloat Priority;           /**< in [0,1] */
>     GLint BaseLevel;            /**< min mipmap level, OpenGL 1.2 */
> @@ -1086,14 +1086,14 @@ struct gl_texture_object
>     GLuint NumLayers;           /**< GL_ARB_texture_view */
>
>     /** GL_EXT_memory_object */
> -   GLenum TextureTiling;
> +   GLenum16 TextureTiling;
>
>     /** Actual texture images, indexed by [cube face] and [mipmap level] */
>     struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS];
>
>     /** GL_ARB_texture_buffer_object */
>     struct gl_buffer_object *BufferObject;
> -   GLenum BufferObjectFormat;
> +   GLenum16 BufferObjectFormat;
>     /** Equivalent Mesa format for BufferObjectFormat. */
>     mesa_format _BufferObjectFormat;
>     /** GL_ARB_texture_buffer_range */
> @@ -1104,7 +1104,7 @@ struct gl_texture_object
>     GLint RequiredTextureImageUnits;
>
>     /** GL_ARB_shader_image_load_store */
> -   GLenum ImageFormatCompatibilityType;
> +   GLenum16 ImageFormatCompatibilityType;
>
>     /** GL_ARB_bindless_texture */
>     struct util_dynarray SamplerHandles;
> @@ -1121,14 +1121,14 @@ struct gl_texture_object
>   */
>  struct gl_tex_env_combine_state
>  {
> -   GLenum ModeRGB;       /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
> -   GLenum ModeA;         /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
> +   GLenum16 ModeRGB;       /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
> +   GLenum16 ModeA;         /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
>     /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */
> -   GLenum SourceRGB[MAX_COMBINER_TERMS];
> -   GLenum SourceA[MAX_COMBINER_TERMS];
> +   GLenum16 SourceRGB[MAX_COMBINER_TERMS];
> +   GLenum16 SourceA[MAX_COMBINER_TERMS];
>     /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */
> -   GLenum OperandRGB[MAX_COMBINER_TERMS];
> -   GLenum OperandA[MAX_COMBINER_TERMS];
> +   GLenum16 OperandRGB[MAX_COMBINER_TERMS];
> +   GLenum16 OperandA[MAX_COMBINER_TERMS];
>     GLuint ScaleShiftRGB; /**< 0, 1 or 2 */
>     GLuint ScaleShiftA;   /**< 0, 1 or 2 */
>     GLuint _NumArgsRGB;   /**< Number of inputs used for the RGB combiner */
> @@ -1262,7 +1262,7 @@ struct gl_tex_env_combine_packed
>   */
>  struct gl_texgen
>  {
> -   GLenum Mode;         /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */
> +   GLenum16 Mode;       /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */
>     GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */
>     GLfloat ObjectPlane[4];
>     GLfloat EyePlane[4];
> @@ -1277,7 +1277,7 @@ struct gl_texture_unit
>  {
>     GLbitfield Enabled;          /**< bitmask of TEXTURE_*_BIT flags */
>
> -   GLenum EnvMode;              /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */
> +   GLenum16 EnvMode;            /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */
>     GLclampf EnvColor[4];
>     GLfloat EnvColorUnclamped[4];
>
> @@ -1373,7 +1373,7 @@ typedef GLfloat gl_clip_plane[4];
>   */
>  struct gl_transform_attrib
>  {
> -   GLenum MatrixMode;                          /**< Matrix mode */
> +   GLenum16 MatrixMode;                                /**< Matrix mode */
>     gl_clip_plane EyeUserPlane[MAX_CLIP_PLANES];        /**< User clip planes */
>     gl_clip_plane _ClipUserPlane[MAX_CLIP_PLANES]; /**< derived */
>     GLbitfield ClipPlanesEnabled;                /**< on/off bitmask */
> @@ -1382,8 +1382,8 @@ struct gl_transform_attrib
>     GLboolean RasterPositionUnclipped;           /**< GL_IBM_rasterpos_clip */
>     GLboolean DepthClamp;                       /**< GL_ARB_depth_clamp */
>     /** GL_ARB_clip_control */
> -   GLenum ClipOrigin;     /**< GL_LOWER_LEFT or GL_UPPER_LEFT */
> -   GLenum ClipDepthMode;  /**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */
> +   GLenum16 ClipOrigin;   /**< GL_LOWER_LEFT or GL_UPPER_LEFT */
> +   GLenum16 ClipDepthMode;/**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */
>  };
>
>
> @@ -1442,7 +1442,7 @@ struct gl_buffer_object
>     GLint RefCount;
>     GLuint Name;
>     GLchar *Label;       /**< GL_KHR_debug */
> -   GLenum Usage;        /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */
> +   GLenum16 Usage;      /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */
>     GLbitfield StorageFlags; /**< GL_MAP_PERSISTENT_BIT, etc. */
>     GLsizeiptrARB Size;  /**< Size of buffer storage in bytes */
>     GLubyte *Data;       /**< Location of storage either in RAM or VRAM. */
> @@ -1498,8 +1498,8 @@ struct gl_pixelstore_attrib
>  struct gl_vertex_array
>  {
>     GLint Size;                  /**< components per element (1,2,3,4) */
> -   GLenum Type;                 /**< datatype: GL_FLOAT, GL_INT, etc */
> -   GLenum Format;               /**< default: GL_RGBA, but may be GL_BGRA */
> +   GLenum16 Type;               /**< datatype: GL_FLOAT, GL_INT, etc */
> +   GLenum16 Format;             /**< default: GL_RGBA, but may be GL_BGRA */
>     GLsizei StrideB;            /**< actual stride in bytes */
>     GLuint _ElementSize;         /**< size of each element in bytes */
>     const GLubyte *Ptr;          /**< Points to array data */
> @@ -1528,8 +1528,8 @@ struct gl_vertex_array
>  struct gl_array_attributes
>  {
>     GLint Size;              /**< Components per element (1,2,3,4) */
> -   GLenum Type;             /**< Datatype: GL_FLOAT, GL_INT, etc */
> -   GLenum Format;           /**< Default: GL_RGBA, but may be GL_BGRA */
> +   GLenum16 Type;           /**< Datatype: GL_FLOAT, GL_INT, etc */
> +   GLenum16 Format;         /**< Default: GL_RGBA, but may be GL_BGRA */
>     GLsizei Stride;          /**< Stride as specified with gl*Pointer() */
>     const GLubyte *Ptr;      /**< Points to client array data. Not used when a VBO is bound */
>     GLintptr RelativeOffset; /**< Offset of the first element relative to the binding offset */
> @@ -1673,7 +1673,7 @@ struct gl_array_attrib
>   */
>  struct gl_feedback
>  {
> -   GLenum Type;
> +   GLenum16 Type;
>     GLbitfield _Mask;    /**< FB_* bits */
>     GLfloat *Buffer;
>     GLuint BufferSize;
> @@ -1762,7 +1762,7 @@ struct gl_evaluators
>  struct gl_transform_feedback_varying_info
>  {
>     char *Name;
> -   GLenum Type;
> +   GLenum16 Type;
>     GLint BufferIndex;
>     GLint Size;
>     GLint Offset;
> @@ -1895,7 +1895,7 @@ struct gl_transform_feedback_object
>   */
>  struct gl_transform_feedback_state
>  {
> -   GLenum Mode;       /**< GL_POINTS, GL_LINES or GL_TRIANGLES */
> +   GLenum16 Mode;     /**< GL_POINTS, GL_LINES or GL_TRIANGLES */
>
>     /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */
>     struct gl_buffer_object *CurrentBuffer;
> @@ -1963,7 +1963,7 @@ struct gl_perf_monitor_counter
>      * Data type of the counter.  Valid values are FLOAT, UNSIGNED_INT,
>      * UNSIGNED_INT64_AMD, and PERCENTAGE_AMD.
>      */
> -   GLenum Type;
> +   GLenum16 Type;
>
>     /** Minimum counter value. */
>     union gl_perf_monitor_counter_value Minimum;
> @@ -2061,7 +2061,7 @@ struct gl_bindless_image
>     GLboolean bound;
>
>     /** Access qualifier (GL_READ_WRITE, GL_READ_ONLY, GL_WRITE_ONLY) */
> -   GLenum access;
> +   GLenum16 access;
>
>     /** Pointer to the base of the data. */
>     GLvoid *data;
> @@ -2114,8 +2114,8 @@ struct gl_program
>     GLubyte *String;  /**< Null-terminated program text */
>
>     /** GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_GEOMETRY_PROGRAM_NV */
> -   GLenum Target;
> -   GLenum Format;    /**< String encoding format */
> +   GLenum16 Target;
> +   GLenum16 Format;    /**< String encoding format */
>
>     GLboolean _Used;        /**< Ever used for drawing? Used for debugging */
>
> @@ -2203,7 +2203,7 @@ struct gl_program
>            * It may be different, though only more strict than the value of
>            * \c gl_image_unit::Access for the corresponding image unit.
>            */
> -         GLenum ImageAccess[MAX_IMAGE_UNIFORMS];
> +         GLenum16 ImageAccess[MAX_IMAGE_UNIFORMS];
>
>           struct gl_uniform_block **UniformBlocks;
>           struct gl_uniform_block **ShaderStorageBlocks;
> @@ -2486,14 +2486,14 @@ struct gl_shader_info
>         * GL_TRIANGLES, GL_QUADS, GL_ISOLINES or PRIM_UNKNOWN if it's not set
>         * in this shader.
>         */
> -      GLenum PrimitiveMode;
> +      GLenum16 PrimitiveMode;
>
>        enum gl_tess_spacing Spacing;
>
>        /**
>         * GL_CW, GL_CCW, or 0 if it's not set in this shader.
>         */
> -      GLenum VertexOrder;
> +      GLenum16 VertexOrder;
>        /**
>         * 1, 0, or -1 if it's not set in this shader.
>         */
> @@ -2515,12 +2515,12 @@ struct gl_shader_info
>         * GL_TRIANGLES_ADJACENCY, or PRIM_UNKNOWN if it's not set in this
>         * shader.
>         */
> -      GLenum InputType;
> +      GLenum16 InputType;
>         /**
>          * GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP, or PRIM_UNKNOWN if
>          * it's not set in this shader.
>          */
> -      GLenum OutputType;
> +      GLenum16 OutputType;
>     } Geom;
>
>     /**
> @@ -2608,7 +2608,7 @@ struct gl_shader
>      *  GL_TESS_CONTROL_SHADER || GL_TESS_EVALUATION_SHADER.
>      * Must be the first field.
>      */
> -   GLenum Type;
> +   GLenum16 Type;
>     gl_shader_stage Stage;
>     GLuint Name;  /**< AKA the handle */
>     GLint RefCount;  /**< Reference count */
> @@ -2873,7 +2873,7 @@ struct gl_shader_variable
>   */
>  struct gl_program_resource
>  {
> -   GLenum Type; /** Program interface type. */
> +   GLenum16 Type; /** Program interface type. */
>     const void *Data; /** Pointer to resource associated data structure. */
>     uint8_t StageReferences; /** Bitmask of shader stage references. */
>  };
> @@ -2948,7 +2948,7 @@ struct gl_shader_program_data
>   */
>  struct gl_shader_program
>  {
> -   GLenum Type;  /**< Always GL_SHADER_PROGRAM (internal token) */
> +   GLenum16 Type;   /**< Always GL_SHADER_PROGRAM (internal token) */
>     GLuint Name;  /**< aka handle or ID */
>     GLchar *Label;   /**< GL_KHR_debug */
>     GLint RefCount;  /**< Reference count */
> @@ -2995,7 +2995,7 @@ struct gl_shader_program
>      * feedback output, see LinkedTransformFeedback.
>      */
>     struct {
> -      GLenum BufferMode;
> +      GLenum16 BufferMode;
>        /** Global xfb_stride out qualifier if any */
>        GLuint BufferStride[MAX_FEEDBACK_BUFFERS];
>        GLuint NumVarying;
> @@ -3239,7 +3239,7 @@ struct gl_query_state
>     /** GL_ARB_pipeline_statistics_query */
>     struct gl_query_object *pipeline_stats[MAX_PIPELINE_STATISTICS];
>
> -   GLenum CondRenderMode;
> +   GLenum16 CondRenderMode;
>  };
>
>
> @@ -3252,7 +3252,7 @@ struct gl_sync_object
>     GLboolean DeletePending;   /**< Object was deleted while there were still
>                                 * live references (e.g., sync not yet finished)
>                                 */
> -   GLenum SyncCondition;
> +   GLenum16 SyncCondition;
>     GLbitfield Flags;          /**< Flags passed to glFenceSync */
>     GLuint StatusFlag:1;       /**< Has the sync object been signaled? */
>  };
> @@ -3374,8 +3374,8 @@ struct gl_renderbuffer
>      */
>     GLboolean NeedsFinishRenderTexture;
>     GLubyte NumSamples;    /**< zero means not multisampled */
> -   GLenum InternalFormat; /**< The user-specified format */
> -   GLenum _BaseFormat;    /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
> +   GLenum16 InternalFormat; /**< The user-specified format */
> +   GLenum16 _BaseFormat;    /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
>                                 GL_STENCIL_INDEX. */
>     mesa_format Format;      /**< The actual renderbuffer memory format */
>     /**
> @@ -3404,7 +3404,7 @@ struct gl_renderbuffer
>   */
>  struct gl_renderbuffer_attachment
>  {
> -   GLenum Type;  /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */
> +   GLenum16 Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */
>     GLboolean Complete;
>
>     /**
> @@ -3491,7 +3491,7 @@ struct gl_framebuffer
>     /*@}*/
>
>     /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */
> -   GLenum _Status;
> +   GLenum16 _Status;
>
>     /** Whether one of Attachment has Type != GL_NONE
>      * NOTE: the values for Width and Height are set to 0 in case of having
> @@ -3530,8 +3530,8 @@ struct gl_framebuffer
>     /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER
>      * attribute group and GL_PIXEL attribute group, respectively.
>      */
> -   GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS];
> -   GLenum ColorReadBuffer;
> +   GLenum16 ColorDrawBuffer[MAX_DRAW_BUFFERS];
> +   GLenum16 ColorReadBuffer;
>
>     /** Computed from ColorDraw/ReadBuffer above */
>     GLuint _NumColorDrawBuffers;
> @@ -3817,7 +3817,7 @@ struct gl_constants
>     GLboolean QuadsFollowProvokingVertexConvention;
>
>     /** GL_ARB_viewport_array */
> -   GLenum LayerAndVPIndexProvokingVertex;
> +   GLenum16 LayerAndVPIndexProvokingVertex;
>
>     /** OpenGL version 3.0 */
>     GLbitfield ContextFlags;  /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */
> @@ -3843,7 +3843,7 @@ struct gl_constants
>     GLuint MaxProgramTextureGatherComponents;
>
>     /* GL_ARB_robustness */
> -   GLenum ResetStrategy;
> +   GLenum16 ResetStrategy;
>
>     /* GL_KHR_robustness */
>     GLboolean RobustAccess;
> @@ -4032,7 +4032,7 @@ struct gl_constants
>     GLboolean FakeSWMSAA;
>
>     /** GL_KHR_context_flush_control */
> -   GLenum ContextReleaseBehavior;
> +   GLenum16 ContextReleaseBehavior;
>
>     struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_STAGES];
>
> @@ -4439,7 +4439,7 @@ struct gl_dlist_state
>        /* State known to have been set by the currently-compiling display
>         * list.  Used to eliminate some redundant state changes.
>         */
> -      GLenum ShadeModel;
> +      GLenum16 ShadeModel;
>     } Current;
>  };
>
> @@ -4670,14 +4670,14 @@ struct gl_image_unit
>      * Access allowed to this texture image.  Either \c GL_READ_ONLY,
>      * \c GL_WRITE_ONLY or \c GL_READ_WRITE.
>      */
> -   GLenum Access;
> +   GLenum16 Access;
>
>     /**
>      * GL internal format that determines the interpretation of the
>      * image memory when shader image operations are performed through
>      * this unit.
>      */
> -   GLenum Format;
> +   GLenum16 Format;
>
>     /**
>      * Mesa format corresponding to \c Format.
> @@ -4979,7 +4979,7 @@ struct gl_context
>     /* GL_EXT_framebuffer_object */
>     struct gl_renderbuffer *CurrentRenderbuffer;
>
> -   GLenum ErrorValue;        /**< Last error code */
> +   GLenum16 ErrorValue;      /**< Last error code */
>
>     /**
>      * Recognize and silence repeated error debug messages in buggy apps.
> @@ -4991,7 +4991,7 @@ struct gl_context
>     simple_mtx_t DebugMutex;
>     struct gl_debug_state *Debug;
>
> -   GLenum RenderMode;        /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */
> +   GLenum16 RenderMode;      /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */
>     GLbitfield NewState;      /**< bitwise-or of _NEW_* flags */
>     uint64_t NewDriverState;  /**< bitwise-or of flags from DriverFlags */
>
> diff --git a/src/mesa/vbo/vbo_exec.h b/src/mesa/vbo/vbo_exec.h
> index dc18889..7e00d45 100644
> --- a/src/mesa/vbo/vbo_exec.h
> +++ b/src/mesa/vbo/vbo_exec.h
> @@ -97,7 +97,7 @@ struct vbo_exec_context
>
>        GLbitfield64 enabled;             /**< mask of enabled vbo arrays. */
>        GLubyte attrsz[VBO_ATTRIB_MAX];   /**< nr. of attrib components (1..4) */
> -      GLenum attrtype[VBO_ATTRIB_MAX];  /**< GL_FLOAT, GL_DOUBLE, GL_INT, etc */
> +      GLenum16 attrtype[VBO_ATTRIB_MAX];  /**< GL_FLOAT, GL_DOUBLE, GL_INT, etc */
>        GLubyte active_sz[VBO_ATTRIB_MAX];  /**< attrib size (nr. 32-bit words) */
>
>        /** pointers into the current 'vertex' array, declared above */
> diff --git a/src/mesa/vbo/vbo_save.h b/src/mesa/vbo/vbo_save.h
> index 51ea9cc..1dc66a5 100644
> --- a/src/mesa/vbo/vbo_save.h
> +++ b/src/mesa/vbo/vbo_save.h
> @@ -63,7 +63,7 @@ struct vbo_save_copied_vtx {
>  struct vbo_save_vertex_list {
>     GLbitfield64 enabled; /**< mask of enabled vbo arrays. */
>     GLubyte attrsz[VBO_ATTRIB_MAX];
> -   GLenum attrtype[VBO_ATTRIB_MAX];
> +   GLenum16 attrtype[VBO_ATTRIB_MAX];
>     GLuint vertex_size;  /**< size in GLfloats */
>
>     /* Copy of the final vertex from node->vertex_store->bufferobj.
> @@ -144,7 +144,7 @@ struct vbo_save_context {
>
>     GLbitfield64 enabled; /**< mask of enabled vbo arrays. */
>     GLubyte attrsz[VBO_ATTRIB_MAX];  /**< 1, 2, 3 or 4 */
> -   GLenum attrtype[VBO_ATTRIB_MAX];  /**< GL_FLOAT, GL_INT, etc */
> +   GLenum16 attrtype[VBO_ATTRIB_MAX];  /**< GL_FLOAT, GL_INT, etc */
>     GLubyte active_sz[VBO_ATTRIB_MAX];  /**< 1, 2, 3 or 4 */
>     GLuint vertex_size;  /**< size in GLfloats */
>
> diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c
> index 11c40a2..a0fb62d 100644
> --- a/src/mesa/vbo/vbo_save_api.c
> +++ b/src/mesa/vbo/vbo_save_api.c
> @@ -436,7 +436,9 @@ compile_vertex_list(struct gl_context *ctx)
>     /* Duplicate our template, increment refcounts to the storage structs:
>      */
>     node->enabled = save->enabled;
> +   STATIC_ASSERT(sizeof(node->attrsz) == sizeof(save->attrsz));
>     memcpy(node->attrsz, save->attrsz, sizeof(node->attrsz));
> +   STATIC_ASSERT(sizeof(node->attrtype) == sizeof(save->attrtype));
>     memcpy(node->attrtype, save->attrtype, sizeof(node->attrtype));
>     node->vertex_size = save->vertex_size;
>     node->buffer_offset =
> diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c
> index c86efcb..fd0ccc1 100644
> --- a/src/mesa/vbo/vbo_save_draw.c
> +++ b/src/mesa/vbo/vbo_save_draw.c
> @@ -141,10 +141,12 @@ bind_vertex_list(struct gl_context *ctx,
>     const GLubyte *map;
>     GLuint attr;
>     GLubyte node_attrsz[VBO_ATTRIB_MAX];  /* copy of node->attrsz[] */
> -   GLenum node_attrtype[VBO_ATTRIB_MAX];  /* copy of node->attrtype[] */
> +   GLenum16 node_attrtype[VBO_ATTRIB_MAX];  /* copy of node->attrtype[] */
>     GLbitfield varying_inputs = 0x0;
>
> +   STATIC_ASSERT(sizeof(node_attrsz) == sizeof(node->attrsz));
>     memcpy(node_attrsz, node->attrsz, sizeof(node->attrsz));
> +   STATIC_ASSERT(sizeof(node_attrtype) == sizeof(node->attrtype));
>     memcpy(node_attrtype, node->attrtype, sizeof(node->attrtype));
>
>     if (aligned_vertex_buffer_offset(node)) {
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list